Javascript DOM (объектная модель документа) - это интерфейс, который позволяет разработчикам управлять содержимым, структурой и стилем веб-сайта. В этой статье мы узнаем, что такое DOM и как вы можете управлять им с помощью Javascript. Эту статью также можно использовать в качестве справочника по основным операциям DOM.

Что такое DOM?

На самом базовом уровне веб-сайт состоит из документа HTML и CSS. Браузер создает представление документа, известное как объектная модель документа (DOM). Этот документ позволяет Javascript получать доступ и управлять элементами и стилями веб-сайта. Модель построена в виде древовидной структуры объектов и определяет:

  • HTML-элементы как объекты
  • Свойства и события элементов HTML
  • Методы доступа к элементам HTML

Места элементов называются узлами. Не только элементы получают узлы, но также атрибуты элементов и текста получают свои собственные узлы (узлы атрибутов и текстовые узлы).

Документ DOM

Документ DOM является владельцем всех других объектов на вашей веб-странице. Это означает, что если вы хотите получить доступ к какому-либо объекту на своей веб-странице, вам всегда нужно начинать с документа. Он также содержит множество важных свойств и методов, которые позволяют нам получать доступ к нашему веб-сайту и изменять его.

Поиск элементов HTML

Теперь, когда мы понимаем, что такое документ DOM, мы можем начать получать наши первые элементы HTML. Есть много разных способов сделать это с помощью Javascript DOM, вот самые распространенные:

Получить элемент по ID

Метод getElementById () используется для получения отдельного элемента по его идентификатору. Давайте посмотрим на пример:

var title = document.getElementById(‘header-title’);

Здесь мы получаем элемент с идентификатором header-title и сохраняем его в переменной.

Получить элементы по имени класса

Мы также можем получить более одного объекта, используя метод getElementsByClassName (), который возвращает массив элементов.

var items = document.getElementsByClassName(‘list-items’);

Здесь мы получаем все элементы с классом list-items и сохраняем их в переменной.

Получить элемент по имени тега

Мы также можем получить наши элементы по имени тега, используя метод getElementsByTagName ().

var listItems = document.getElementsByTagName(‘li’);

Здесь мы получаем все элементы li нашего HTML-документа и сохраняем их в переменной.

Queryselector

Метод querySelector () возвращает первый элемент, соответствующий указанному селектору CSS. Это означает, что вы можете получать элементы по идентификатору, классу, тегу и всем другим допустимым селекторам CSS. Здесь я просто перечисляю несколько наиболее популярных вариантов.

Получить по идентификатору:

var header = document.querySelector(‘#header’)

По классам:

var items = document.querySelector(‘.list-items’)

Получить по тегу:

var headings = document.querySelector(‘h1’);

Получите более конкретные элементы:

Мы также можем получить более конкретные элементы с помощью селекторов CSS.

document.querySelector(“h1.heading”);

В этом примере мы ищем тег и класс одновременно и возвращаем первый элемент, который проходит CSS-селектор.

Запрос

Метод querySelectorAll () полностью аналогичен методу querySelector (), за исключением того, что он возвращает все элементы, подходящие для селектора CSS.

var heading = document.querySelectorAll(‘h1.heading’);

В этом примере мы получаем все теги h1, которые имеют класс заголовок, и сохраняем их в массиве.

Изменение HTML-элементов

HTML DOM позволяет нам изменять содержимое и стиль элемента HTML, изменяя его свойства.

Изменение HTML

Свойство innerHTML можно использовать для изменения содержимого элемента HTML.

document.getElementById(“#header”).innerHTML = “Hello World!”;

В этом примере мы получаем элемент с идентификатором заголовка и устанавливаем для внутреннего содержимого значение «Hello World!».

InnerHTML также можно использовать для размещения тегов в другом теге.

document.getElementsByTagName("div").innerHTML = "<h1>Hello World!</h1>"

Здесь мы помещаем тег h1 во все уже существующие div.

Изменение значения атрибута

Вы также можете изменить значение атрибута с помощью DOM.

document.getElementsByTag(“img”).src = “test.jpg”;

В этом примере мы меняем src всех тегов ‹img /› на test.jpg.

Смена стиля

Чтобы изменить стиль элемента HTML, нам нужно изменить свойство стиля наших элементов. Вот пример синтаксиса для изменения стилей:

document.getElementById(id).style.property = new style

Теперь давайте посмотрим на пример, в котором мы получаем элемент и меняем нижнюю границу на сплошную черную линию:

document.getElementsByTag(“h1”).style.borderBottom = “solid 3px #000”;

Свойства CSS должны быть записаны в верблюжьем регистре вместо обычного имени свойства css. В этом примере мы использовали borderBottom вместо border-bottom.

Добавление и удаление элементов

Теперь мы посмотрим, как мы можем добавлять новые элементы и удалять существующие.

Добавление элементов

var div = document.createElement(‘div’);

Здесь мы просто создаем элемент div с помощью метода createElement (), который принимает тэг в качестве параметра и сохраняет его в переменной. После этого нам просто нужно дать ему некоторый контент, а затем вставить его в наш документ DOM.

var newContent = document.createTextNode("Hello World!"); 
div.appendChild(newContent);
document.body.insertBefore(div, currentDiv);

Здесь мы создаем контент с помощью метода createTextNode (), который принимает String в качестве параметра, а затем мы вставляем наш новый элемент div перед div, который уже существует в нашем документе.

Удаление элементов

var elem = document.querySelector('#header');
elem.parentNode.removeChild(elem);

Здесь мы получаем элемент и удаляем его методом removeChild ().

Заменить элементы

Теперь давайте посмотрим, как мы можем заменять предметы.

var div = document.querySelector('#div');
var newDiv = document.createElement(‘div’);
newDiv.innerHTML = "Hello World2"
div.parentNode.replaceChild(newDiv, div);

Здесь мы заменяем элемент с помощью метода replaceChild (). Первый аргумент - это новый элемент, а второй аргумент - это элемент, который мы хотим заменить.

Запись непосредственно в выходной поток HTML

Мы также можем писать выражения HTML и JavaScript непосредственно в выходной поток HTML с помощью метода write ().

document.write(“<h1>Hello World!</h1><p>This is a paragraph!</p>”);

Мы также можем передавать выражения JavaScript, такие как объект даты.

document.write(Date());

Метод write () также может принимать несколько аргументов, которые будут добавлены к документу в порядке их появления.

Обработчики событий

HTML DOM также позволяет Javascript реагировать на события HTML. Здесь я перечислил некоторые из наиболее важных:

  • щелчок мышью
  • загрузка страницы
  • движение мыши
  • изменение поля ввода

Назначить события

Вы можете определять события прямо в вашем HTML-коде, используя атрибуты ваших тегов. Вот пример события onclick:

<h1 onclick=”this.innerHTML = ‘Hello!’”>Click me!</h1>

В этом примере текст ‹h1 /› изменится на «Привет!» при нажатии на кнопку.

Вы также можете вызывать функции при запуске события, как вы можете видеть в следующем примере.

<h1 onclick=”changeText(this)”>Click me!</h1>

Здесь мы вызываем метод changeText () при нажатии кнопки и передаем элемент как атрибут.

Мы также можем назначить те же события в нашем коде Javascript.

document.getElementById(“btn”).onclick = changeText();

Назначить слушателей событий

Теперь давайте посмотрим, как вы можете назначить слушателей событий вашим HTML-элементам.

document.getElementById(“btn”).addEventListener('click', runEvent);

Здесь мы только что назначили событие clickevent, которое вызывает метод runEvent при щелчке по нашему элементу btn.

Вы также можете назначить несколько событий одному элементу:

document.getElementById(“btn”).addEventListener('mouseover', runEvent);

Узловые отношения

Узлы в DOM Document имеют иерархические отношения друг с другом. Это означает, что узлы структурированы как дерево. Мы используем термины родительский, родственный и дочерний для описания отношений между узлами.

Верхний узел называется корневым и является единственным узлом, не имеющим родителя. Корнем в обычном HTML-документе является тег ‹html /›, потому что он не имеет родителя и является верхним тегом документа.

Перемещение между узлами

Мы можем перемещаться между узлами, используя следующие свойства:

  • parentNode
  • childNodes
  • Первый ребенок
  • последний ребенок
  • nextSibling

Вот пример того, как вы можете получить родительский элемент h1.

var parent = document.getElementById(“heading”).parentNode

Рекомендуемая литература:



Заключение

Вы добрались до конца! Надеюсь, что эта статья помогла вам разобраться в Javascript DOM и в том, как использовать ее для управления элементами на вашем веб-сайте.

Если вы нашли это полезным, порекомендуйте и поделитесь им с другими разработчиками.

Если у вас есть какие-либо вопросы или отзывы, дайте мне знать в комментариях ниже.

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

Первоначально опубликовано на gabrieltanner.org.