Почему getElementsByName можно использовать только из документа в JavaScript?

Я хотел бы сделать что-то вроде этого:

var form = document.getElementsByTagName("form")[0];
var form_element_list = form.getElementsByName("foo");

Но, увы, похоже, что getElementsByName можно запустить только из document (см. MDN).

Вопрос:
почему поиск возможен только с уровня документа? Особенно как name атрибуты в основном используются в формах.

Спасибо!

3 ответа

Решение

почему поиск возможен только с уровня документа?

По историческим причинам? Мы действительно не знаем. Тем не менее, имена являются глобальными идентификаторами так же, как идентификаторы в document.getElementsByIdТолько они не уникальны.

Тем более, что атрибуты имени в основном используются в формах.

Вы бы использовали форму .elements Коллекция для этой цели, она также может быть адресована именами.

Вы можете просто использовать document.formName где (formName - это атрибут имени, который вы дали форме), чтобы получить форму, и document.formName.elements, чтобы получить элементы в коллекции. Затем вы можете ссылаться на входные элементы по document.formName.elements.inputID

Согласно MDN:

Каждая веб-страница, загруженная в браузер, имеет свой собственный объект документа. Интерфейс Document служит точкой входа в контент веб-страницы (дерево DOM, включая такие элементы, как и) и предоставляет глобальные функциональные возможности для документа (например, получение URL-адреса страницы и создание новых элементов в документе).

Так как он служит точкой входа, методы для поиска элементов страницы происходят из него.

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