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

Как можно лучше объединить два меню на мобильной версии сайта, переместив второе меню внутрь первого?
  • 30 июня 2024 г. 21:02
Ответы на вопрос 3
При перемещении элементов по 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);
```

Таким образом, два меню будут объединены в один контейнер на мобильной версии сайта.
Из документации: <br/> <blockquote>Description: Insert every element in the set of matched elements after the target.</blockquote> <br/> Т.е. это не перемещение элемента как таковое, а вставка <b>такого </b> содержимого после каждого элемента из списка. Иначе бы такой элемент вставлялся несколько раз в разные места.
<code>insertAfter</code> <br/> Вам нужен не этот метод. Для перемещения узлов в пределах родителя используется <a href="https://developer.mozilla.org/ru/docs/Web/API/Node/replaceChild" rel="nofollow">replaceChild</a> . <br/> PS: <br/> <code>".primary_menu ul li:nth-child(2)"</code> <br/> Научитесь захватывать узлы нативными методами <a href="https://developer.mozilla.org/ru/docs/Web/API/Document/querySelector" rel="nofollow">querySelector</a> и <a href="https://developer.mozilla.org/ru/docs/Web/API/Document/querySelectorAll" rel="nofollow">querySelectorAll</a> . <br/> Нет причин использовать JQuery в вашей задаче.
Похожие вопросы