我需要将数据值从一个元素复制到另一个元素,但jQuery的clone()方法不会克隆数据.我无法迭代数据:
element.data().each
Run Code Online (Sandbox Code Playgroud)
因为它data()
是一个函数而不是一个jQuery对象.似乎我必须保留一个单独的属性名称列表并引用它们,但这似乎太hacky.那我该怎么做呢?
a)迭代数据项
或
b)clone()
包含数据的元素.
Nex*_*hus 29
要真正只复制数据 - *,这非常简单:
$(destination).data( $(source).data() );
Run Code Online (Sandbox Code Playgroud)
这是因为使用.data()没有参数将返回所有数据片段的键值对象,反之亦然,您还可以使用键值对象一次更新多个片段数据.
2017年5月25日更新
JavaScript中没有jQuery的聪明替代方案似乎是:
Object.assign(destination.dataset, source.dataset);
Run Code Online (Sandbox Code Playgroud)
为了提供另一种选择,即不克隆整个对象,您可以将数据对象复制到包含名称/值对的新数组,如下所示:
function getOriginalElementData(domElementJQueryObject){
var originalElementData = new Array();
$.each(domElementJQueryObject.data(),function(name,value) {
originalElementData.push({"name":name,"value":value});
});
return originalElementData;
}
Run Code Online (Sandbox Code Playgroud)
要将数据恢复到另一个对象:
function restoreOriginalElementData(domElementJQueryObject,originalElementData){
for(var i=0;i<originalElementData.length;i++){
domElementJQueryObject.data(originalElementData[i].name,originalElementData[i].value);
}
}
Run Code Online (Sandbox Code Playgroud)
迭代数据项的部分是从这个答案复制的:jQuery Loop through data() object