jQuery的:如何复制一个元素的所有属性,并将其应用到另一个?
如何将一个元素的属性复制到另一个元素?
HTML
<select id="foo" class="bar baz" style="display:block" width="100" data-foo="bar">...</select> <div>No attributes yet</div>
JavaScript的
var $div = $('div'); var $select = $('select'); //now copy the attributes from $select to $div
您可以使用本地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"));
jsfiddle的工作解决scheme
编辑
更新了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); } });
HTML
<div id="adiv" class="aclass">A class</div> <div id="bdiv" class="bclass">B class</div>
这是将#bdiv
属性复制到#adiv
。
很简单
function cloneAttributes(element, sourceNode) { let attr; let attributes = Array.prototype.slice.call(sourceNode.attributes); while(attr = attributes.pop()) { element.setAttribute(attr.nodeName, attr.nodeValue); } }
我们也可以尝试扩展jQuery原型( $.fn
)对象来提供一个可以链接到jQuery()函数的新方法。
这里是@ pimvdb解决scheme的扩展,提供了一个复制所有属性的函数
用法如下所示:
$(destinationElement).copyAllAttributes(sourceElement);
扩展函数可以这样定义:
(function ($) { // Define the function here $.fn.copyAllAttributes = function(sourceElement) { // 'that' contains a pointer to the destination element var that = this; // Place holder for all attributes var allAttributes = ($(sourceElement) && $(sourceElement).length > 0) ? $(sourceElement).prop("attributes") : null; // Iterate through attributes and add if (allAttributes && $(that) && $(that).length == 1) { $.each(allAttributes, function() { // Ensure that class names are not copied but rather added if (this.name == "class") { $(that).addClass(this.value); } else { that.attr(this.name, this.value); } }); } return that; }; })(jQuery);
一个例子可以在http://jsfiddle.net/roeburg/Z8x8x/find
希望这可以帮助。
一个非jQuery解决scheme:
function copy(element){ var clone = document.createElement(element.nodeName); for(key in element){ clone.setAttribute(key,element[key]); } return clone; }
它复制方法和其他你可能不需要的东西,但希望你不介意。 这段代码很小,很简单。
自Firefox 22以来,不再支持Node.attributes(不由其他浏览器实现并从规范中删除)。 它仅在Element(Element.attributes)上受支持。
你可以试试这个:
function copyAttributes(from, to) { $($(from)[0].attributes). each(function(){$(to).attr(this.nodeName, this.nodeValue);}); return $(to); };
return语句可以让你写下如下的东西:
copyAttributes(some_element, $('<div></div>')).append(...) ...
希望这可以帮助。
$("div").addClass($('#foo').attr('class'));