В этом руководстве вы узнаете, как вставить новый узел после существующего в качестве дочернего от родительского узла.
JavaScript DOM предоставляет insertBefore() метод, после которого вы можете добавить новый узел в качестве дочернего элемента. Однако он еще не поддерживает метод insertAfter().
Чтобы вставить новый узел после существующего в качестве дочернего узла, вы можете использовать следующий подход:
- Сначала выберите одноуровневый узел существующего узла.
- Затем выберите родительский узел существующего узла и вызовите метод
insertBefore()на родительском узле, чтобы вставить новый узел перед этим непосредственным одноуровневым узлом.
Следующая функция insertAfter() иллюстрирует логику:
function insertAfter(newNode, existingNode) {
existingNode.parentNode.insertBefore(newNode, existingNode.nextSibling);
}Предположим, что у вас есть следующий список элементов:
<ul id="menu">
<li>Home</li>
<li>About</li>
<li>Contact</li>
</ul>Следующее вставляет новый узел после последнего элемента списка:
let menu = document.getElementById('menu');
// create a new li node
let li = document.createElement('li');
li.textContent = 'Services';
// insert a new node after the last list item
insertAfter(li, menu.lastElementChild);Как это работает:
- Сначала выберите элемент ul по его идентификатору (меню), используя метод
getElementById(). - Во-вторых, создайте новый элемент списка, используя метод
createElement(). - В-третьих, используйте метод
insertAfter() для вставки элемента списка после последнего элемента.
Соединим все это вместе.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JavaScript insertAfter() Demo</title>
</head>
<body>
<ul id="menu">
<li>Home</li>
<li>About</li>
<li>Contact</li>
</ul>
<script>
function insertAfter(newNode, existingNode) {
existingNode.parentNode.insertBefore(newNode, existingNode.nextSibling);
}
let menu = document.getElementById('menu');
// create a new li node
let li = document.createElement('li');
li.textContent = 'Services';
insertAfter(li, menu.lastElementChild);
</script>
</body>
</html>После вставки меню выглядит следующим образом:
<ul id="menu">
<li>Home</li>
<li>About</li>
<li>Contact</li>
<li>Services</li>
</ul>Заключение
- JavaScript DOM еще не поддерживает метод
insertAfter(). - Используйте метод
insertBefore()и свойствоnextSibling, чтобы вставить новый узел перед существующим в качестве дочернего для родительского узла.
