Скрыть все элементы класса с помощью простого Javascript

Обычно я использую document.getElementById('id').style.display = 'none', чтобы скрыть один div с помощью Javascript. Есть ли простой способ скрыть все элементы, принадлежащие одному классу?

Мне нужно простое Javascript-решение, которое не использует jQuery.

Ответы

Ответ 1

В отсутствие jQuery я бы использовал что-то вроде этого:

<script>
    var divsToHide = document.getElementsByClassName("classname"); //divsToHide is an array
    for(var i = 0; i < divsToHide.length; i++){
        divsToHide[i].style.visibility = "hidden"; // or
        divsToHide[i].style.display = "none"; // depending on what you're doing
    }
<script>

Это взято из этого вопроса SO: Скрыть div по идентификатору класса, однако, видя, что вы просите решение "старой школы" JS, я считаю, что getElementsByClassName поддерживается только современными браузерами

Ответ 2

Поздний ответ, но я узнал, что это самое простое решение (если вы не используете jQuery):

var myClasses = document.querySelectorAll('.my-class'),
    i = 0,
    l = myClasses.length;

for (i; i < l; i++) {
    myClasses[i].style.display = 'none';
}

Демо

Ответ 3

function getElementsByClassName(classname, node)  {
    if(!node) node = document.getElementsByTagName("body")[0];
    var a = [];
    var re = new RegExp('\\b' + classname + '\\b');
    var els = node.getElementsByTagName("*");
    for(var i=0,j=els.length; i<j; i++)
        if(re.test(els[i].className))a.push(els[i]);
    return a;
}

var elements = new Array();
elements = getElementsByClassName('yourClassName');
for(i in elements ){
     elements[i].style.display = "none";
}

Ответ 4

Предполагая, что вы имеете дело с одним классом на элемент:

function swapCssClass(a,b) {
    while (document.querySelector('.' + a)) {
        document.querySelector('.' + a).className = b;
    }
}

а затем просто вызовите его с помощью

swapCssClass('x_visible','x_hidden');

Ответ 5

Есть много способов скрыть все элементы, у которых есть определенный класс в javascript. Одним из способов является использование цикла for, но здесь я хочу показать вам другие способы сделать это.

1.forEach и querySelectorAll('.classname')

document.querySelectorAll('.classname').forEach(function(el) {
   el.style.display = 'none';
});

2.для... из с getElementsByClassName

for (let element of document.getElementsByClassName("classname")){
   element.style.display="none";
}

3.Array.protoype.forEach getElementsByClassName

Array.prototype.forEach.call(document.getElementsByClassName("classname"), function(el) {
    // Do something amazing below
    el.style.display = 'none';
});

4.[].forEach и getElementsByClassName

[].forEach.call(document.getElementsByClassName("classname"), function (el) {
    el.style.display = 'none';
});

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

Примечание: все вышеперечисленные методы поддерживаются в современных браузерах, но, возможно, некоторые из них не будут работать в браузерах старости, таких как Internet Explorer.

Ответ 6

Я использую модифицированную версию этого:

function getElementsByClass(nameOfClass) {    
  var temp, all, elements;

  all = document.getElementsByTagName("*");
  elements = [];

  for(var a=0;a<all.length;a++) {
    temp = all[a].className.split(" ");
    for(var b=0;b<temp.length;b++) {
      if(temp[b]==nameOfClass) { 
        elements.push(ALL[a]); 
        break; 
      }
    }
  }
  return elements;
};

И JQuery тоже сделает это очень легко.

Ответ 7

Я бы предложил другой подход. Вместо того, чтобы изменять свойства всех объектов вручную, давайте добавим новый CSS в документ:

/* License: CC0 */
var newStylesheet = document.createElement('style');
newStylesheet.textContent = '.classname { display: none; }';
document.head.appendChild(newStylesheet);

Ответ 8

Я знаю, что OP не хочет библиотеки высокого уровня, но, если нет реальной потребности в ограничении размера и вычислений, я предлагаю использовать один, даже если он не будет использоваться в другом месте приложения.

Например, используя jQuery, это очень просто:

$('.myClass').hide()