#jquery #html #arrays
#jquery #HTML #массивы
Вопрос:
Я много искал, но чувствую, что ответ может быть очень простым.
Что у меня есть: jQuery берет элементы списка из div и помещает их в массив для добавления в другое место.
Что происходит: объекты перемещаются в массив, но они также удаляются из DOM.
Что мне нужно: поместить их в массив, но также оставить оригиналы там, где они были.
Вот код, который я использую для справки
var leftItems = [];
var rightItems = [];
$('.footer-top li').slice(0,6).each(function(i) {
leftItems.push(this);
});
$('.footer-top li').each(function(i) {
rightItems.push(this);
});
$.each(rightItems, function(index, value) {
$('.footer-menu-mob ul.right').append(this);
});
$.each(leftItems, function(index, value) {
$('.footer-menu-mob ul.left').append(this);
});
Комментарии:
1. Вы могли бы попробовать
.push($(this).clone());
Ответ №1:
Данный объект может находиться только в одном месте в DOM одновременно. Итак, когда вы .append()
извлекаете элементы из массива, вы ПЕРЕМЕЩАЕТЕ их в новое место в DOM. Если вам нужна копия этих элементов в новом месте, вы можете использовать jQuery .clone()
.
Смотрите аннотации ниже, чтобы понять, что происходит:
var leftItems = [];
var rightItems = [];
// this makes a nice array of DOM elements, nothing is removed from
// the DOM here
$('.footer-top li').slice(0,6).each(function(i) {
leftItems.push(this);
});
// this makes a nice array of DOM elements, nothing is removed from
// the DOM here
$('.footer-top li').each(function(i) {
rightItems.push(this);
});
// this MOVES these elements from their current location in the DOM to
// a new location
$.each(rightItems, function(index, value) {
$('.footer-menu-mob ul.right').append(this);
});
// this MOVES these elements from their current location in the DOM to
// a new location
$.each(leftItems, function(index, value) {
$('.footer-menu-mob ul.left').append(this);
});
Если вам не нужно сохранять массив, вы можете использовать .clone()
и упростить свой код следующим образом:
$('.footer-top li').slice(0,6).clone().appendTo('.footer-menu-mob ul.left');
$('.footer-top li').clone().appendTo('.footer-menu-mob ul.right');
Ответ №2:
Вам нужно клонировать элементы DOM. Вы также можете значительно упростить свой код:
$('.footer-top li').each(function(index, value) {
var targetSelector = '.footer-menu-mob ul.right';
if(index > 6) {
targetSelector = '.footer-menu-mob ul.left';
}
$(this).clone().appendTo(targetSelector);
});
Обратите внимание, что здесь я предполагаю, что вы хотите, чтобы первые 7 элементов li были добавлены .footer-menu-mob ul.right
, а остальные — в .footer-menu-mob ul.left
, тогда как ваш первоначальный подход к нарезке массива поместил бы первые семь элементов справа, а все элементы слева. Так как вы повторно указываете селектор.