Свойства навигации по DOM хороши, когда элементы расположены рядом. А что, если нет? Как получить произвольный элемент страницы?
Для этого в DOM есть дополнительные методы поиска.
document.getElementById или просто id
Если у элемента есть атрибут id
, то мы можем получить его вызовом document.getElementById(id)
, где бы он ни находился.
Например:
<div id="elem">
<div id="elem-content">Element</div>
</div>
<script>
// получить элемент
let elem = document.getElementById('elem');
// сделать его фон красным
elem.style.background = 'red';
</script>
Также есть глобальная переменная с именем, указанным в id
:
<div id="elem">
<div id="elem-content">Элемент</div>
</div>
<script>
// elem - ссылка на элемент с id="elem"
elem.style.background = 'red';
// внутри id="elem-content" есть дефис, так что такой id не может служить именем переменной
// ...но мы можем обратиться к нему через квадратные скобки: window['elem-content']
</script>
…Но это только если мы не объявили в JavaScript переменную с таким же именем, иначе она будет иметь приоритет:
<div id="elem"></div>
<script>
let elem = 5; // теперь elem равен 5, а не <div id="elem">
alert(elem); // 5
</script>
Не используйте такие глобальные переменные для доступа к элементам
Это поведение соответствует стандарту, но поддерживается в основном для совместимости, как осколок далёкого прошлого.
Браузер пытается помочь нам, смешивая пространства имён JS и DOM. Это удобно для простых скриптов, которые находятся прямо в HTML, но, вообще говоря, не очень хорошо. Возможны конфликты имён. Кроме того, при чтении JS-кода, не видя HTML, непонятно, откуда берётся переменная.
В этом учебнике мы будем обращаться к элементам по id
в примерах для краткости, когда очевидно, откуда берётся элемент.
В реальной жизни лучше использовать document.getElementById
.
Значение id
должно быть уникальным
Значение id
должно быть уникальным. В документе может быть только один элемент с данным id
.
Если в документе есть несколько элементов с одинаковым значением id
, то поведение методов поиска непредсказуемо. Браузер может вернуть любой из них случайным образом. Поэтому, пожалуйста, придерживайтесь правила сохранения уникальности id
.
Только document.getElementById
, а не anyElem.getElementById
Метод getElementById
можно вызвать только для объекта document
. Он осуществляет поиск по id
по всему документу.