Другие предложили .getElementsByClassName("home")[0]
, и это ужасная идея.
Сначала .getElementsByClassName()
возвращает список узлов всех соответствующих элементов.Если вас интересует только первое, нет смысла его искать, а затем продолжать поиск на наличие совпадений, а затем отбрасывать все, кроме первого, что и делает этот код.
Во-вторых,.getElementsByClassName()
возвращает «живой» список узлов.Это означает, что каждый раз, когда вы взаимодействуете со списком, во всем DOM снова выполняется поиск совпадений, что гарантирует, что в вашем списке установлены самые последние данные.Это может быть полезно в приложениях, где узлы добавляются и удаляются динамически, но эти варианты использования не так распространены.
FYI: .getElementsByTagName()
, .getElementsByName()
и node.childNodes
также возвращают списки активных узлов,Если нет необходимости вести актуальный список, лучше всего использовать .querySelectorAll()
.И, честно говоря, даже если вам нужен обновленный список узлов, вам все же лучше использовать .querySelectorAll()
и просто запустить его снова вручную в том месте, где вам нужен обновленный список.
Вот вам хорошая страница , которая обсуждает это и вот что она должна сказать:
Как думать о живом объекте?
Живой объект не интуитивен.Вы можете думать об этом как о отложенной оценке или ленивой оценке. Метод или свойство живого объекта пересчитывается при обращении к его результату.
А вот JSPerf , чтобы показатьразница в производительности между живым и статическим списком узлов.
Но в этом случае нам даже не нужен список узлов, мы просто хотим один узел.Правильное решение будет следующим:
document.querySelector(".home");
.querySelector()
сканирует документ на наличие первого элемента, который соответствует предоставленному селектору, и, если он найден, возвращает ссылку на этот единственный узел.В противном случае возвращается undefined
.