Element.className возвращает только «неопределенное»

Я пытаюсь сделать небольшую интерактивную галерею, в которой люди могли бы проверять/выбирать некоторые изображения. Некоторые из них я использовал для хранения изображений, а некоторые добавил для обозначения выбранных фотографий. Затем я набрал небольшой код JS, чтобы проверять или снимать отметки с фотографий, используя className файла .

Итак, две мои проблемы:

  1. Код работает не так, как ожидалось. Не могу выбрать ни одно изображение, когда я запускаю свой навигатор.

  2. Консоль возвращает только «неопределенный», как поясняется в приведенном ниже коде.

Вот код: Element.className возвращает только «неопределенное»

Это своего рода моя первая попытка в JS, и я действительно не понимаю, что не работает, поэтому я надеюсь, что вы получите ответ или, по крайней мере, некоторые небольшие указания для меня. :)

Спасибо, Томас

Пожалуйста, не размещайте изображения кода. Вы должны вставить реальный рабочий фрагмент или хотя бы текст кода

Maheer Ali 02.04.2019 13:59

попробуй document.getElementByClassName('the-class')[0]

Roy Bogado 02.04.2019 14:04

Да, извини. Я понял, что это был не лучший способ поделиться своим вопросом :) Я буду иметь это в виду, когда у меня будет еще один вопрос. :)

Thomas 02.04.2019 14:31
Поведение ключевого слова "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) для оценки ваших знаний,...
1
3
1 224
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

getElementsByClassName дает набор элементов. Свойство className доступно для определенного элемента в этом списке. Нет в самом списке.

... так что решение есть?

Jeremy Thille 02.04.2019 14:02

@Jeremy: ... для доступа к свойству определенного элемента. Нет в самом списке.

David Hedlund 02.04.2019 14:04

@ Джереми: я не согласен. Указание источника ошибки является, отвечая на вопрос. Я оставлю ОП решать, как справиться с тем фактом, что он обращается с коллекцией так, как если бы это был один элемент. Кто-то в комментариях упоминает доступ к [0], один ответ предлагает повторить сбор. У меня недостаточно знаний о предполагаемом программном обеспечении, чтобы рекомендовать его в любом случае. Человек, пишущий код, должен понимать, что имеет дело с коллекцией, а не с отдельным узлом, и принимать взвешенное решение на основе этого. Не просто копируйте любой код, чтобы решить проблему.

David Hedlund 02.04.2019 14:09

Я бы предпочел согласиться с Дэвидом, потому что для новичка мне кажется более полезным получить несколько советов, не получая полного решения. Это «заставляет» меня проводить некоторые исследования, и это тоже круто. Но спасибо вам обоим, ребята!

Thomas 02.04.2019 14:25

Как ты хочешь. В общем, на Stackoverflow подсказка должна быть размещена в виде комментария. Ответы должны быть реальными ответами, полными решениями. Но не бери в голову.

Jeremy Thille 02.04.2019 14:30

Проблема в том, что document.getElementsByClassName возвращает HTMLCollection и HTMLCollection. Вы должны проверить className его элементов.

Вы можете просмотреть его, а затем получить className каждого элемента

for(let i = 0;i<unslectedClass.length;i++){
   console.info(unselectedClass[i].className);
}

Или преобразуйте HTMLCollection в реальный массив с помощью Spread Operator и используйте forEach()

[...unselectedClass].forEach(x => console.info(x.className))
Ответ принят как подходящий

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

Например, получение первого элемента коллекции.

unselectedClass[0].className;

В противном случае вы можете использовать цикл for для доступа к каждому элементу в коллекции.

for (var i = 0; i < unselectedClass.length; i++) {
    var class = unselectedClass[i].className;
}

Просто идеальный ответ! Я не нашел его, когда проводил исследование, но спасибо за терпение, чтобы ответить мне :)

Thomas 02.04.2019 14:11

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