Переменная javascript соответствует элементу DOM с тем же идентификатором
Я новичок в javascript, и я просто заметил поведение JavaScript, которое я не видел нигде. Если у меня есть элемент DOM с назначенным идентификатором, скажем "x", то в моем javascript этот элемент автоматически присваивается переменной x. Я вижу это в хроме и сафари. Является ли это документированной функцией javascript?
Например:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form id='x'>
<input type='text' name='info' id='info'/>
<input type='submit' name='submit' value='Complete'/>
</form>
<script type='text/javascript'>
window.onload = function() {
alert( x==document.getElementById('x') );
info.value = 'Test me!';
}
</script>
</body>
</html>
При загрузке он будет показывать true, а область ввода отобразит "Test me!". Если это правильное поведение, зачем вообще нужно document.getElementById?
Ответы
Ответ 1
Это поведение описано в стандарте HTML (глава 6.2.4).
В стандарте определяются "именованные элементы", которые являются элементами HTML, которые имеют либо атрибут name
, либо id
. (Обратите внимание, что атрибут name
определяется только для определенных типов элементов HTML.)
Для каждого именованного элемента браузер (среда) определяет соответствующее глобальное свойство.
Ответ 2
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<div id="w"></div>
<script type="text/javascript">
alert( w );
w = null;
alert( w );
</script>
</body>
</html>
Попробуйте этот тест в IE8. Вы поймете, что w глобально и не может быть перезаписано.
Измените "w = null" в "var w = null" и перезагрузите (после освобождения кеша)...
IE8 проверяет переменные перед выполнением и удаляет глобальный корреспондент.
Я действительно не могу дождаться того дня, когда веб-разработчикам больше не придется поддерживать IE8...
СОВЕТ: не используйте имена переменных, равные идентификаторам элемента DOM. OMG OMG
Ответ 3
Это нестандартная функция только для IE.
Не полагайтесь на него.