jQuery: переменная указывает на живой DOM, а не на копию DOM только в IE

#javascript #jquery #html #internet-explorer

#javascript #jquery #HTML #internet-explorer

Вопрос:

У меня есть DIV, который содержит неупорядоченный список. Я хочу сделать копию этого, немного переформатировать его, а затем снова вставить обратно в DOM. Это работает нормально, execpt в IE (пока протестировано в 8 и 9), где кажется, что копия элементов кажется живой, а не копией.

Вот что происходит:

 var target = $('.cities').eq(0) //grab my list

var $bigList = $(target).find('li')  // grab all the list items

alert($bigList.eq(0).html()) // this displays the first list item, no problem

$(target).html(emptyList) // I put in a bunch of placeholder HTML

alert($bigList.eq(0).html()) // EMPTY on IE, same as first alert() on all others 
 

Кажется, что $bigList это все еще указывает на DOM, а не копируется как значение. Как я могу обойти это?

Ответ №1:

Вместо $(target).html(emptyList) использования $bigList.remove(); : http://jsfiddle.net/gilly3/FP5kX /

Редактировать: вызовите оба оператора:

 $bigList.remove();
target.html(emptyList);
 

http://jsfiddle.net/gilly3/FP5kX/2/

Комментарии:

1. Извините, я не понял, что «emptylist» — это какой-то HTML-заполнитель, который я использую позже.

2. Правильно. .remove() удаляет элементы из DOM, но не удаляет их. У вас все еще есть ваши элементы. Смотрите jsfiddle, который я опубликовал.

3. Это сработало прекрасно. Спасибо. Я все еще удивляюсь, почему IE обрабатывает это по-другому.

Ответ №2:

Попробуйте cloning .cities, используя clone, вы получите копию domelement, но не сам элемент

 var target = $('.cities').clone()[0];