Я знаю, что этот вопрос старый, но я думаю, что он нуждается в небольшом уточнении, поскольку некоторые ответы здесь устарели, так как W3C изменил определение, и, следовательно, возвращаемое значение этих методов getElementsByTagName()
и getElementsByClassName()
Эти методы на момент написания этого ответа возвращают объект - пустой или нет - типа HTMLCollection
и не NodeList
.
Это похоже на разницу между свойствами children
, которая возвращает объект типа HTMLCollection
, поскольку он состоит только из элементов и исключает узлы текста или комментария, и childNodes
, который возвращает объект типа NodeList
, поскольку он может содержать и другие типы узлов, такие как текст и комментарии.
Примечание: я бы остановился здесь и выразил свое отсутствие понимания того, почему метод querySelectorAll()
в настоящее время возвращает NodeList
, а не HTMLCollection
, так как он работает исключительно на узлах элементов в документе и ничего больше.
Вероятно, это как-то связано с потенциальным охватом других типов узлов в будущем, и они пошли на более перспективное решение, кто на самом деле знает? :)
РЕДАКТИРОВАТЬ: Я думаю, что я получил обоснование этого решения, чтобы выбрать NodeList
, а не HTMLCollection
для querySelectorAll()
.
Поскольку они сконструировали HTMLCollection
как исключительно и полностью работоспособный, и так как этот метод не нуждается в этой оперативной функциональности, они решили использовать реализацию NodeList
, чтобы наилучшим образом служить своей цели экономически и эффективно.