Почему при перемещении элементов по DOM они дублируются?

Как можно лучше объединить два меню на мобильной версии сайта, переместив второе меню внутрь первого?
  • 30 июня 2024 г. 21:02
Ответы на вопрос 5
При перемещении элементов по DOM они могут дублироваться из-за того, что вы создаете новый элемент, который ссылается на тот же объект, что и старый элемент. Это может произойти, например, если вы используете методы типа cloneNode(), appendChild() или insertBefore(). В этом случае вам следует убедиться, что вы перемещаете элемент, а не создаете его копию.

Чтобы объединить два меню на мобильной версии сайта, переместив второе меню внутрь первого, вы можете сделать следующее:

1. Создайте контейнер, который будет содержать оба меню. Например, div с классом "mobile-menu-container".
2. Переместите второе меню внутрь этого контейнера с помощью метода appendChild().
3. Поставьте этот контейнер с новыми меню на нужное место на странице с помощью метода insertBefore() или других методов работы с DOM.

Пример:

```html
<div class="mobile-menu-container">
  <ul class="menu-1">
    <li>Пункт меню 1</li>
    <li>Пункт меню 2</li>
    <li>Пункт меню 3</li>
  </ul>
  <ul class="menu-2">
    <li>Пункт меню 4</li>
    <li>Пункт меню 5</li>
    <li>Пункт меню 6</li>
  </ul>
</div>
```

Поместить код в контейнер:

```javascript
var container = document.querySelector('.mobile-menu-container');
var menu2 = document.querySelector('.menu-2');
container.appendChild(menu2);
```

Таким образом, два меню будут объединены в один контейнер на мобильной версии сайта.
Из документации: 
Description: Insert every element in the set of matched elements after the target.

Т.е. это не перемещение элемента как таковое, а вставка такого содержимого после каждого элемента из списка. Иначе бы такой элемент вставлялся несколько раз в разные места.
insertAfter 
Вам нужен не этот метод. Для перемещения узлов в пределах родителя используется replaceChild .
PS:
".primary_menu ul li:nth-child(2)"
Научитесь захватывать узлы нативными методами querySelector и querySelectorAll .
Нет причин использовать JQuery в вашей задаче.
Из документации: 
Description: Insert every element in the set of matched elements after the target.

Т.е. это не перемещение элемента как таковое, а вставка такого содержимого после каждого элемента из списка. Иначе бы такой элемент вставлялся несколько раз в разные места.
insertAfter 
Вам нужен не этот метод. Для перемещения узлов в пределах родителя используется replaceChild .
PS:
".primary_menu ul li:nth-child(2)"
Научитесь захватывать узлы нативными методами querySelector и querySelectorAll .
Нет причин использовать JQuery в вашей задаче.
Похожие вопросы