使用withDataAndEvents的jQuery.clone()似乎不会复制数据

时间:2015-10-14 03:03:23

标签: javascript jquery jsfiddle

好的,我一直在考虑这个问题一段时间没有成功。根据jQuery文档,如果我在具有数据的对象上使用.clone(true),那么当我将withDataAndEvents参数设置为true时,也会复制该数据。

例如,我有一个对象。我克隆它。我使用$(obj).data('mydata')['title'] = "My New Title";更新克隆数据。然后当我检查原始对象中mydata上的 title 元素时,它现在的值也是“我的新标题”。

为什么这不适合我?我错过了什么?或者这不是它应该如何工作?

我有一个小提琴,它实现了我正在尝试实现的概念,它做了同样的事情。

http://jsfiddle.net/JAZ013/5ryyu0Lq/2/

谢谢!

2 个答案:

答案 0 :(得分:1)

我有同样的情况并通过扩展div1数据并分配给div2数据来解决它。

此处的情况略有不同,因为值为{title:'My DIV #1'},因此引用的对象title未被复制。我解决了扩展div1 data的问题。

见下面的例子:



$(document).ready(function(){
    var myDIV1 = $('#test1');
    myDIV1.data('mydata', {title:'My DIV #1'});
    
    var myDIV2 = myDIV1.clone();
    myDIV2.data('mydata',$.extend({}, myDIV1.data('mydata')));
    myDIV2.data('mydata')['title'] = 'My DIV #2';

    myDIV1.after(myDIV2);

    myDIV1.html(myDIV1.data('mydata')['title']);
    myDIV2.html(myDIV2.data('mydata')['title']);
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
    
<div id="test1">Thank you for trying this for me!</div>
&#13;
&#13;
&#13;

http://jsfiddle.net/kishoresahas/5ryyu0Lq/3/

答案 1 :(得分:0)

如果您查看withDataAndEvents的文档,它会复制数据并不能克隆它。

  

一个布尔值,指示是否应复制事件处理程序和数据   以及元素。

在您的情况下,元素mydata都引用同一个对象,因此对该对象属性所做的任何更改都将反映在两个元素中