$ .clone()& $ .data()奇怪的行为

时间:2014-09-26 14:19:11

标签: jquery jquery-data jquery-clone

有人可以向我解释为什么当我使用jquery .clone()克隆一个元素时,将其存储在$(windows).data('myclone')中并将此克隆的数据元素附加到另一个元素,{{1}中存在克隆的数据} 变化? (指向我在html检查器中新创建的元素)

$(windows).data('myclone')

这是在你的控制台中看到它的小提琴。第一个创建的元素只是克隆数据,然后当你追加它时,它会改变它 http://jsfiddle.net/50eu0bnp/

3 个答案:

答案 0 :(得分:0)

嗯,对我来说,第一步是删除ID属性,转而使用类属性。来自jQuery.com

  

“注意:使用.clone()具有生成元素的副作用   重复的id属性,应该是唯一的。哪里   可能,建议避免使用此方法克隆元素   或者使用类属性作为标识符。“

使用.clone(true)时会发生什么?这是一个“深层复制”。

答案 1 :(得分:0)

您需要克隆克隆,否则您将重复使用相同的元素。

您还需要仅定位其中一个元素,或者在每个现有class="clone"元素之后复制它,这会导致创建其他副本。

JSFiddle:http://jsfiddle.net/TrueBlueAussie/50eu0bnp/1/

$('.clone button').on('click',function(){
   var cloneNode = $(this).parent().clone();
    $(window).data('cloneNode',cloneNode);
});
$('#append').on('click',function(){
    var clone = $(window).data('cloneNode').clone();  // Clone the clone
    $('.clone:last').after(clone);
});

如果您克隆的元素可能会有所不同(目前它们不同),您需要转移到委派的事件处理程序,因为原始$('.clone button')未连接到新副本:http://jsfiddle.net/TrueBlueAussie/50eu0bnp/3/

$(document).on('click', '.clone button', function () {
    var cloneNode = $(this).parent().clone();
    $(window).data('cloneNode', cloneNode);
});

您还需要解决重复id="files"的问题,因为这是一个完整的禁忌。 jQuery只能看到第一个(例如$('#files'))因为id必须是唯一的。

答案 2 :(得分:0)

$('.clone button').on('click', function() {
    var cloneNode = $(this).parent().clone();
    $(window).data('cloneNode', cloneNode);
    console.log(cloneNode);

当您获取$(' .clone按钮')时,您将抓取文档中的每个克隆按钮。抓住一个。

$('.clonebutton')[0].on(...)