jQuery:如何复制一个元素的所有属性并将它们应用到另一个元素?

And*_*rew 61 javascript jquery

如何将一个元素的属性复制到另一个元素?

HTML

<select id="foo" class="bar baz" style="display:block" width="100" data-foo="bar">...</select>

<div>No attributes yet</div>
Run Code Online (Sandbox Code Playgroud)

JavaScript的

var $div = $('div');
var $select = $('select');

//now copy the attributes from $select to $div
Run Code Online (Sandbox Code Playgroud)

pim*_*vdb 85

您可以使用本机Node#attributes属性:http://jsfiddle.net/SDWHN/16/.

var $select = $("select");
var $div = $("div");

var attributes = $select.prop("attributes");

// loop through <select> attributes and apply them on <div>
$.each(attributes, function() {
    $div.attr(this.name, this.value);
});

alert($div.data("foo"));
Run Code Online (Sandbox Code Playgroud)

  • 当您的变量包含对jQuery对象的引用时,可以使用'$'来预先设置变量.我在当前的公司开始了这种趋势......它使得快速阅读代码变得更加容易! (7认同)

Yai*_*evy 14

ES6 语法一行:

function cloneAttributes(target, source) {
  [...source.attributes].forEach( attr => { target.setAttribute(attr.nodeName ,attr.nodeValue) })
}
Run Code Online (Sandbox Code Playgroud)

正如第一条评论中所述-您可能不想复制源 id 属性……因此,如果您需要参考,此属性会将其保存为“data-id”属性。

function cloneAttributes(target, source) {
  [...source.attributes].forEach( attr => { target.setAttribute(attr.nodeName === "id" ? 'data-id' : attr.nodeName ,attr.nodeValue) })
}
Run Code Online (Sandbox Code Playgroud)

  • 迄今为止最好的答案。现在是 2020 年。 (5认同)

Toc*_*cco 11

关于jsfiddle的工作解决方案

编辑

更新了jsfiddler

使用Javascript

$(function(){
    var destination = $('#adiv').eq(0);
    var source = $('#bdiv')[0];

    for (i = 0; i < source.attributes.length; i++)
    {
        var a = source.attributes[i];
        destination.attr(a.name, a.value);
    }
});
Run Code Online (Sandbox Code Playgroud)

HTML

<div id="adiv" class="aclass">A class</div>
<div id="bdiv" class="bclass">B class</div>
Run Code Online (Sandbox Code Playgroud)

这是复制#bdiv属性 #adiv.

  • 你应该至少在这里发布你的代码的重要部分,如果没有其他原因,如果jsfiddle永远消失你的答案仍然存在. (4认同)

小智 9

很简单

function cloneAttributes(element, sourceNode) {
  let attr;
  let attributes = Array.prototype.slice.call(sourceNode.attributes);
  while(attr = attributes.pop()) {
    element.setAttribute(attr.nodeName, attr.nodeValue);
  }
}
Run Code Online (Sandbox Code Playgroud)