Почему клон jquery клонирует родителя, но не его потомков?

У меня есть родительский div со своим дочерним элементом следующим образом:

<div id="padre" class="demo">
 <ul id="sortable1" class="droptrue ui-sortable">
  <li id="app1" class="ui-state-default toolTip">
   <div id="00" class="AppPadre"></div>

Итак, когда я клонирую свой родительский div со следующей строкой:

var $copia = $('#padre>*').clone();

и я печатаю свою клонированную переменную, она показывает только:

<div id="padre" class="demo">
 <ul id="sortable1" class="droptrue ui-sortable">

Кто-нибудь знает, почему он копирует только 1-й 2-й уровень?? Заранее спасибо. Сразу после копирования я удаляю все подэлементы "padre" с помощью $('#padre>*').remove(); и он удаляет все подэлементы, но когда я делаю добавление, он добавляет только 1-й подэлемент «падре».


person linker85    schedule 23.04.2012    source источник
comment
Что вы пытаетесь клонировать? $('#padre>*') клонирует всех своих детей.   -  person Selvakumar Arumugam    schedule 23.04.2012
comment
Вы хотите сделать var $copia = $('#padre').clone();?   -  person amit_g    schedule 23.04.2012
comment
При правильном HTML ваш оператор .clone() работает нормально. Посмотрите на этот рабочий jsFiddle: jsfiddle.net/jfriend00/Sja7Z. Если вы пытаетесь сделать что-то другое, вы должны лучше объяснить свой вопрос.   -  person jfriend00    schedule 23.04.2012
comment
Я пытаюсь клонировать все подэлементы, затем, когда я изменяю размер браузера, я удаляю все подэлементы падре, а когда возвращаюсь к исходному разрешению; Прилагаю копию.   -  person linker85    schedule 23.04.2012


Ответы (2)


Попробуй это:

var $copia = $('#padre>*').clone(true, true);
person Uchenna Nwanyanwu    schedule 23.04.2012
comment
Два аргумента .clone() управляют только клонированием данных и событий. Они не влияют на клонирование самих объектов. Клон всегда глубокий клон. Объяснение см. в документе jquery. - person jfriend00; 23.04.2012
comment
Clone уже выполняет глубокое клонирование. Два аргумента предназначены для клонирования событий и данных. - person amit_g; 23.04.2012

person    schedule
comment
Вероятно, это проблема, если OP не показал нам фактический HTML. .clone() клонирует все дерево, а не только его часть. - person jfriend00; 23.04.2012
comment
@ jfriend00 Я не думаю, что это так .. он просто делится фрагментом своего кода. Пример: определенно есть больше <li>, поэтому закрывающая часть ul и li отсутствует. - person Selvakumar Arumugam; 23.04.2012
comment
@Vega - у тебя есть другое объяснение? Код OP отлично работает с правильным HTML. См. jsFiddle здесь: jsfiddle.net/jfriend00/Sja7Z - person jfriend00; 23.04.2012
comment
если DOCTYPE страницы XHTML Strict, эта разметка проблематична, особенно в IE. - person undefined; 23.04.2012
comment
На самом деле я закрыл его, просто я не поставил закрывающие теги в примере. Но спасибо за совет. - person linker85; 23.04.2012
comment
@jfriend00 Я знаю, и я думаю, что ОП не объяснил, что он хотел сделать - person Selvakumar Arumugam; 23.04.2012
comment
если я делаю новый файл с кодом из ссылки, он работает, но когда я пытаюсь реализовать его, он не работает, может быть, он не работает, потому что сразу после клонирования я удаляю все подэлементы из падре?? - person linker85; 23.04.2012
comment
@ linker85 попробуйте обновленную скрипту и проверьте результат с помощью firebug, это работает? - person undefined; 23.04.2012
comment
Хорошо, мне как-то удалось решить эту проблему, поставив: $copia = $('#padre').children().clone(); сразу после того, как я загрузил все свои подэлементы (я загружал их снаружи из функции onready во внешней функции, которая вызывалась onready) в padre. Поэтому, когда я делаю изменение размера, я очищаю подэлементы al padre и просто добавляю клон в padre следующим образом: $('#padre›*').remove(); $('#padre').append($copia); - person linker85; 23.04.2012