Почему getElementsByName
, getElementsByTagName
и getElementsByClassName
не возвращают HTMLCollection
(W3C, MDN) вместо NodeList
(W3C, MDN)?
Все три возвращают живой NodeList только из элементов:
document.getElementsByName('nameAttrVal');
document.getElementsByTagName('div');
document.getElementsByClassName('space separated classes');
NodeList — это прекрасно, но HTMLCollection
более конкретны, так как могут содержать только элементы HTML. Кажется, что это было бы идеально для этих методов.
При создании коллекции с ней связываются фильтр и корень.
Например, когда создается объект HTMLCollection для атрибута document.images, он связывается с фильтром, который выбирает только элементы img и располагается в корне документа.
Затем коллекция представляет собой живое представление поддерева с корнем коллекции, содержащего только узлы, соответствующие заданному фильтру. Вид линейный. При отсутствии особых требований обратное узлы в коллекции должны быть отсортированы в порядке дерева.
Пара мест HTMLCollection
уже используется:
document.images
element.children
Примечание: querySelectorAll
возвращает неактивное NodeList
.
qSA
был определен через несколько лет после этих трех API, поэтому я думаю, что разработчики спецификаций с вами согласны. Но вы не можете вернуться назад и изменить что-то сейчас. - person Dave Methvin   schedule 05.03.2014