2015-10-28 2 views
4

У меня здесь огромная проблема.
Я не могу заставить свой onclick работать так, как я хочу. Поэтому я надеюсь, что кто-то здесь может мне помочь.Почему мой onclick не удаляет ни один из моих классов?

<a href="#" onclick="document.getElementsByClassName('nice').style.display='none';" class="sorter">#NiceToKnow</a> 

<div id="cards" class="nice"></div> 
<div id="cards" class="nice"></div> 
<div id="cards" class="nice"></div> 
<div id="cards" class="video"></div> 

Я хочу его показать: нет; каждый мой класс = «хороший», поэтому вы можете видеть только класс = «видео», но ничего не происходит вообще.

+0

это вернуть массив элементов document.getElementsByClassName («хороший»), так что использовать для петли, чтобы скрыть весь элемент, который имеет «хороший» класс –

ответ

5

Вы выбираете элементы класса не сам класс. Таким образом, вам придется перебирать элементы, поскольку javascript может редактировать только то, что находится в DOM, а не классы CSS, которые влияют на ваши элементы. Таким образом getElementsByClassName возвращает массив узлов, в которых мы должны прокручивать и скрывать каждый из них. Нажмите runsnippet ниже, чтобы увидеть эту работу

function changeNice(){ 
 
//ASSIGN ELEMENTS TO ARRAY 
 
elementsofClass=document.getElementsByClassName('nice'); 
 
for(i=0; i<elementsofClass.length; i++){ 
 
    //HIDE SELECTED ELEMENT 
 
    elementsofClass[i].style.display='none'; 
 
    
 
    
 
}}
<a href="#" onclick="changeNice();" class="sorter">#NiceToKnow</a> 
 

 
<div id="cards1" class="nice">TEST 1</div> 
 
<div id="cards2" class="nice">TEST 2</div> 
 
<div id="cards3" class="nice">TEST 3</div> 
 
<div id="cards4" class="video">I don't HIDE</div>

Также не используйте дубликат ID. Это приведет к ошибкам позже при попытке выбрать ваши элементы.

0

getElementsByClassName возвращает массив всех элементов соответствия, поэтому вам нужно будет указать индекс или пропустить их все, чтобы изменить их свойство.

Изменить код этого

document.getElementsByClassName('nice')[0].style.display='none' 

// Для каждого элемента

var e = document.getElementsByClassName('nice'); 
for (i = 0; i < e.length; i++) { 
    e[i].style.display = "none"; 
} 
+0

Не мог бы только выбрать 1-й элемент? Он хочет всех элементов. –

+0

Отметьте мое обновление @Andreas – Nakib

+0

@JoshKG, что я сказал, чтобы пройти через каждый элемент, Но проверьте мое обновление – Nakib

1

Изменить код на что-то вроде этого:

var elems = document.getElementsByClassName('nice'); 
for(var i = 0; i < elems.length; i++) { 
    elems[i].style.display = 'none' 
} 

Вы должны итерацию по результатам возвращается getElementsByClassName.

jsfiddle

2

The getElementsByClassName возвращает массив, так что нам нужно перебирать массив и спрятать один за другим.

Так что лучше объявить функцию и определить логику внутри этого. См. Пример ниже.

window.hideAllniceClass = function() { 
 
    var elems = document.getElementsByClassName('nice'); 
 
    for (var i = 0; i != elems.length; ++i) { 
 
     elems[i].style.display = "none"; // hidden has to be a string 
 
    } 
 
}
<a href="#" onclick="hideAllniceClass();" class="sorter">#NiceToKnow</a> 
 

 
<div id="cards1" class="nice">Test Content</div> 
 
<div id="cards2" class="nice">Test Content</div> 
 
<div id="cards3" class="nice">Test Content</div> 
 
<div id="cards4" class="video">Test Video Content</div>

DEMO

+0

Да, это код, но чтобы помочь айзеру понять, можете ли вы объяснить, что делает ваш код? –

+1

Спасибо @JoshKG! Пожалуйста, дайте мне знать, если обновленный ответ будет полезен :) –

+2

@ KishoreSahas Я бы рекомендовал либо удалить атрибуты id, либо сделать их уникальными, а не показывать слабый синтаксис. – PC3TJ

-2

Поскольку у ваших divs нет уникальных имен, они находятся в массивах карт []. Чтобы получить доступ к определенному div, вам нужно ссылаться на массив на этот конкретный div. Запрашиваемое решение должно работать.

+0

Им не нужно иметь уникальное имя, так как они могут быть выбраны там именем класса, а затем закодированы через массив, например, каждый другой ответ. Решение этих разделов уникальным именем просто решительно усложнит проблему. – PC3TJ

+0

Если вы не говорите о том, есть ли идентификатор, который OP все дублирует, как описано в моем ответе, что, конечно, является слабым синтаксисом; не влияет на результаты в этой конкретной задаче. – PC3TJ

1

Вы можете создать цикл, который будет цикл через все nice элементов, а затем отображать none так: https://jsfiddle.net/7vf9pz8u/

<script> 
    function hide(){ 
    for(ct=0; ct < 3; ct++){ 
    document.getElementsByClassName('nice')[ct].style.display='none' 
    } 
    } 
</script> 
Смежные вопросы