Свойства элемента окна JavaScript - PullRequest
3 голосов
/ 11 мая 2010

Сотрудник показал мне следующий код и спросил, почему он работает.

<span id="myspan">Do you like my hat?</span>
<script type="text/javascript">
var spanElement = document.getElementById("myspan");
alert("Here I am! " + spanElement.innerHTML + "\n" + myspan.innerHTML);
</script>

Я объяснил, что свойство объекта присоединяется к объекту окна с именем идентификатора элемента, когда браузер анализирует документ, который затем содержит ссылку на соответствующий узел dom. Это как будто window.myspan = document.getElementById("myspan") вызывается за кулисами при визуализации страницы.

В ходе последующего обсуждения мы подняли несколько вопросов:

  • Объект window и большая часть DOM не являются частью официальных стандартов JavaScript / ECMA, но описанное выше поведение задокументировано в любой другой официальной литературе, возможно, связанной с браузером?

  • Вышесказанное работает в браузере (по крайней мере, основные претенденты), потому что есть объект окна, но терпит неудачу в чем-то вроде носорога. Написание кода, основанного на этом, считается плохой практикой, поскольку в нем слишком много предположений относительно среды выполнения?

  • Существуют ли какие-либо браузеры, в которых вышеперечисленное не работает, или это считается стандартным поведением по всем направлениям?

Кто-нибудь здесь знает ответы на эти вопросы и хотел бы просветить меня? Я пробовал быстрый поиск в интернете, но признаюсь, что не уверен, как правильно сформулировать запрос. Указатели на ссылки и документацию приветствуются.

Ответы [ 2 ]

3 голосов
/ 11 мая 2010

Это нестандартное поведение только для IE, и его не следует использовать.

[1] [2] [3]

1 голос
/ 11 мая 2010

Это не стандартная функция, поддерживаемая только IE и, в некоторых случаях, Opera. Это также может зависеть от того, находится ли браузер в режиме quirks , и имеет ли элемент атрибут name.

К вашему второму пункту, rhino не содержит саму реализацию DOM, поэтому вопрос не применим. То есть встроенного интерпретатора HTML нет, поэтому дополнительных переменных не будет.

env.js - это реализация DOM для Rhino, предоставляющая интерпретатор HTML. Поскольку идентификаторы как window переменные области видимости не являются веб-стандартом, а проект env стремится соответствовать стандартам, вы также не увидите описанного поведения там.

Надеюсь, это поможет!

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