Использование массива внутри getElementsByClassName()

Я новичок в javaScript, и я пытался скрыть несколько div, запустив функцию. div существуют, они называются test1 до test8 . каждый раз, когда я активирую функцию, она выдает мне ошибку document.getElementsByClassName(...).style is undefined

вот мой код

var divs = ["test1", "test2", "test3", "test4", "test5", "test6", "test7", "test8"];
for (var i=0; i<divs.length; i++)  {
  document.getElementsByClassName(divs[i]).style.display = "none";
  }

HTML

  <div class = "test1">
    <p>Hi 1</p>
  </div>
  <div class = "test2">
    <p>Hi 2</p>
  </div>
  <div class = "test3">
    <p>Hi 3</p>
  </div>
  <div class = "test4">
    <p>Hi 4</p>
  </div>
  <div class = "test5">
    <p>Hi 5</p>
  </div>
  <div class = "test6">
    <p>Hi 6</p>
  </div>
  <div class = "test7">
    <p>Hi 7</p>
  </div>
  <div class = "test8">
    <p>Hi 8</p>
  </div>

После прочтения повторяющегося вопроса я попробовал это:

function cleardiv() { 
    var divs = ["test1", "test2", "test3", "test4", "test5", "test6", "test7", "test8"]; 
    var elems = document.getElementsByClassName(divs[i]); 
    for (var i = 0; i<elems.length; i++) { 
        elems[i].style.display = 'none'; 
    } 
}
document.getElementsByClassName(divs[i]) возвращает массив, вам нужно установить style элементов массива по отдельности.
zero298 26.02.2019 19:02
getElementsByClassName возвращает массив. Вам нужно работать с первым элементом в нем.
jmargolisvt 26.02.2019 19:02

@jmargolisvt Ему нужно работать с элементами все в нем.

Barmar 26.02.2019 19:03

@zero298 Zero298 не возвращает массив. Он возвращает список узлов.

Scott Marcus 26.02.2019 19:03

@jmargolisvt не возвращает массив. Он возвращает список узлов.

Scott Marcus 26.02.2019 19:04

у вас есть лишняя фигурная скобка внутри, пожалуйста, удалите ее

LSKhan 26.02.2019 19:05

@ScottMarcus не является списком узлов. но HTMLКоллекция :) Разница есть

m51 26.02.2019 19:05

NB: вызов ваших классов CSS с таким числовым суффиксом может указывать на плохой дизайн. Скорее всего, вам действительно следует использовать одно и то же имя класса.

trincot 26.02.2019 19:06

Ну как мне тогда поступить?

Assad Rajab 26.02.2019 19:10

@trincot в реальном коде div называются как-то иначе, но для облегчения понимания я делаю их такими

Assad Rajab 26.02.2019 19:12

@jmargolisvt, что ты имеешь в виду?

Assad Rajab 26.02.2019 19:13

@kotlet Для всех практических целей нет никакой разницы. Как документы. состояние, название Коллекция HTML по историческим причинам. Эта коллекция содержит узлы и реализует интерфейс списка узлов.

Scott Marcus 26.02.2019 19:20

@Barmar, чувак, ты только что пометил мой пост как отмеченный без какой-либо полезной информации, я проверил ссылку, но не нашел того, что хочу, поэтому, пожалуйста, ответь на мой вопрос или удали этот дублирующийся знак

Assad Rajab 26.02.2019 19:23

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

Barmar 26.02.2019 19:24

Если вы не можете понять, как включить этот ответ в свой код, опубликуйте то, что вы пробовали, и я снова открою вопрос, чтобы мы могли объяснить, как это исправить.

Barmar 26.02.2019 19:26

Это просто var elems = document.getElementsByClassName(divs[i]);, за которым следует цикл for в дубликате.

Barmar 26.02.2019 19:28

См. эта рабочий пример для вашего решения. Вы не должны использовать .getElementsByClassName() в первую очередь.

Scott Marcus 26.02.2019 19:37

@Barmar Это будет перебирать только 8 списков узлов. При таком подходе ему понадобится вложенный цикл для перебора каждого узла в каждом из списков узлов.

Scott Marcus 26.02.2019 19:46

function cleardiv() { var divs = ["test1", "test2", "test3", "test4", "test5", "test6", "test7", "test8"]; var elems = document.getElementsByClassName(divs[i]); for (var i = 0; i<elems.length; i++) { elems[i].style.display = 'none'; } }

Assad Rajab 26.02.2019 19:46

@Barmar, спасибо за вашу помощь, но то, что вы мне сказали, почему-то не сработало… я вставил код в комментарий

Assad Rajab 26.02.2019 19:49

@AssadRajab Вам не хватает цикла for, который повторяется по divs.

Barmar 26.02.2019 19:50

@ScottMarcus Спасибо за вашу помощь, это именно то, что я хотел. это работает спасибо чувак

Assad Rajab 26.02.2019 19:50
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
22
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда вы добавили цикл по элементам в классе, вы удалили цикл по именам классов. Вам нужны вложенные циклы, чтобы получить все.

function cleardiv() { 
    var divs = ["test1", "test2", "test3", "test4", "test5", "test6", "test7", "test8"]; 
    for (var j = 0; j < divs.length; j++) {
        var elems = document.getElementsByClassName(divs[j]); 
        for (var i = 0; i<elems.length; i++) { 
            elems[i].style.display = 'none'; 
        } 
    }
}

Вы также можете сделать это с помощью одного цикла, используя querySelectorAll.

function cleardiv() {
    var elems = document.querySelectorAll(".test1,.test2,.test3,.test4,.test5,.test6,.test7,.test8");
    for (var i = 0; i<elems.length; i++) { 
        elems[i].style.display = 'none'; 
    } 
}

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

Assad Rajab 26.02.2019 20:00

но есть небольшая большая проблема... код записывает обновление в элемент, а не в файл css. поэтому, если я попытаюсь снова отобразить div, он не будет отображаться. как это решить?

Assad Rajab 26.02.2019 20:28

Вы действительно хотите навсегда изменить файл на сервере? Это должно быть сделано скриптом сервера.

Barmar 26.02.2019 22:48

Если вы хотите динамически изменять правила таблицы стилей в текущем сеансе, см. stackoverflow.com/questions/6620393/…

Barmar 26.02.2019 22:53

Другие вопросы по теме