Идентификатор элемента html как переменная javascript

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

<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 эпохи? Ранее?

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

Ответ 1

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

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

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

это не похоже на очень хорошую "особенность", чтобы иметь

Правильно. Не используйте его.:)

Ответ 2

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

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

Ответ 3

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

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