Какова реализация GetElementByID ()? - PullRequest
3 голосов
/ 02 января 2011

Может кто-нибудь объяснить мне внутреннюю реализацию HTML метода getElementById ()?Обходит ли все дерево DOM, чтобы найти указанный элемент, или он достаточно умен, чтобы сначала искать близлежащие элементы?

Ответы [ 3 ]

7 голосов
/ 02 января 2011

Это зависит от браузера, но, скорее всего, использовать хэш-карту из элемента id->. Это правда, что есть много недопустимых страниц, которые имеют повторяющиеся идентификаторы. Однако браузер по-прежнему будет возвращать только один элемент, а не коллекцию.

Я не знаю, что вы подразумеваете под "соседними элементами", поскольку метод существует только в document.

Если вам интересно, вы можете найти реализацию для бесплатных программных браузеров, таких как Firefox и Chrome.

6 голосов
/ 02 января 2011

Реализация полностью зависит от реализации.Некоторые браузеры могут использовать хэш-карту или подобное, или они могут не использовать (потому что, хотя id является обязательным для уникальности , существует множество плохо написанных страниц, которые предоставляют недопустимую разметку с дублированием idс).Internet Explorer 6 и 7 даже не ограничивают значения getElementById до id, они ужасно объединяют пространства имен , хотя Microsoft ясно видела свет, и IE8 и IE9 улучшают его.

Для браузеров, которые реализованы с открытым исходным кодом, вы можете узнать, конечно. Вот ссылка на источник WebKit , а вот ссылка на в Mozilla (этот номер строки может немного отличаться, если вы не попадете прямо на него, просто найдитеGetElementById и GetElementByIdInternal) .Оба из этого ответа здесь, на StackOverflow . (На самом деле, глядя на этот вопрос, я думаю, что этот вопрос может быть дубликатом, хотя, как указывает Мэтью в комментарии ниже, все движется достаточно быстро, чтобы оправдать обновление ...)

1 голос
/ 02 января 2011

Это зависит.Этот метод реализуется каждым поставщиком веб-браузера, поэтому детали могут отличаться от одной к другой и, возможно, от одной версии браузера к другой.браузер, такой как Mozilla Firefox, и посмотрите, сможете ли вы найти реализацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...