如何使用jQuery复制元素的数据?

MDC*_*ore 20 jquery

我需要将数据值从一个元素复制到另一个元素,但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)

  • 我相信你的答案是迄今为止最好的解决方案.接受的答案只是对另一个问题的引用,该问题涉及JavaScript对象,而不是HTML元素及其数据属性.+1 (3认同)

sim*_*mon 1

为了提供另一种选择,即不克隆整个对象,您可以将数据对象复制到包含名称/值对的新数组,如下所示:


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