HTML-идентификатор элемента в качестве переменной JavaScript - PullRequest
12 голосов
/ 16 марта 2012

Рассмотрим следующий код:

<html>
<head></head>
<body>
<div id='test' class='blah'>
  <a href='http://somesite.com/' id='someLink'>click!</a>
</div>
</body>
</html>

Итак, я недавно обнаружил, что это создает объект javascript с именем someLink, и я могу, например, получить значение атрибута href с помощью someLink.href. Я проверил это в последних Chrome, FF и IE, и это работает.

Во-первых, как долго эта "особенность" существует? Я думаю, что, возможно, какое-то время, потому что я знал в течение многих лет, что идентификаторы для HTML-элементов на странице должны быть уникальными, и если у вас есть более одного элемента с одинаковым идентификатором, последний перезаписывает предыдущие (и), и использование, например, getElementById () вернет последний. Но я никогда не понимал почему , но теперь, глядя на это как на перспективу "это создает объект", это имеет смысл. Итак, что касается возможности прямого доступа к нему с помощью объекта id-name-as-javascript ... как давно это было? Эра IE6? Ранее

2-й ... Я думаю, это скорее предмет для обсуждения, чем вопрос, но ... ИМО, это не очень хорошая "особенность" ... Не в этом ли смысл иметь Функции DOM и оболочки, такие как getElementById(), чтобы придать некоторую организацию и, что более важно, сократить проблемы с пространством имен? Я не думаю, что мне нужно беспокоиться о случайных HTML-элементах на странице, перезаписывающих мои переменные javascript (что-то недавно произошло, поэтому я обнаружил эту «особенность»). Кто-нибудь знает , почему это так, как есть, что за этим стоит?

Ответы [ 3 ]

10 голосов
/ 16 марта 2012

Во-первых, как долго эта "особенность" существует?

Это Microsoft-ism, возникший вокруг IE 4, если я правильно помню.

Некоторые другие браузеры добавили его поддержку, чтобы быть совместимым с плохо написанным кодомэто зависит от этого.Некоторые могут поддерживать его только в режиме quirks .

. Это не очень хорошая "функция", чтобы иметь

Correct.Не используйте это.:)

3 голосов
/ 16 марта 2012

Да, это было в течение очень долгого времени, что, вероятно, единственная причина, по которой он существует. Удаление такой «функции» нарушит совместимость с существующими веб-сайтами, что производители браузеров очень неохотно делают.

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

0 голосов
/ 16 марта 2012

Это старая функция IE, которую не рекомендуется использовать. Несколько браузеров реализуют это, часто как не перечисляемые свойства объекта окна. FF, например, делает это только в режиме причуд.

Для дальнейшего чтения см. Дубликат Есть ли спецификация, согласно которой id элементов должен быть глобально изменен? ...

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