删除所有属性
是否有可能使用jQuery一次删除所有属性?
<img src="example.jpg" width="100" height="100">
至
<img>
我试过$('img').removeAttr('*');
没有运气。 任何人?
更新:以前的方法在IE8中工作,但不在IE8兼容模式和以前版本的IE。 所以这里是一个版本,它使用jQuery去除属性,因为它做得更好:
$("img").each(function() { // first copy the attributes to remove // if we don't do this it causes problems // iterating over the array we're removing // elements from var attributes = $.map(this.attributes, function(item) { return item.name; }); // now use jQuery to remove the attributes var img = $(this); $.each(attributes, function(i, item) { img.removeAttr(item); }); });
当然,你可以做一个插件 :
jQuery.fn.removeAttributes = function() { return this.each(function() { var attributes = $.map(this.attributes, function(item) { return item.name; }); var img = $(this); $.each(attributes, function(i, item) { img.removeAttr(item); }); }); }
然后做:
$("img").removeAttributes();
一个不需要JQuery的简单方法:
while(elem.attributes.length > 0) elem.removeAttribute(elem.attributes[0].name);
您可以扩展jQuery现有的.removeAttr()
方法,使其接受零参数,以从集合中的每个元素中删除所有属性,而不是创build新的jQuery.fn.removeAttributes
(在接受的答案中演示)
var removeAttr = jQuery.fn.removeAttr; jQuery.fn.removeAttr = function() { if (!arguments.length) { this.each(function() { // Looping attributes array in reverse direction // to avoid skipping items due to the changing length // when removing them on every iteration. for (var i = this.attributes.length -1; i >= 0 ; i--) { jQuery(this).removeAttr(this.attributes[i].name); } }); return this; } return removeAttr.apply(this, arguments); };
现在,您可以调用不带参数的.removeAttr()
以从元素中删除所有属性:
$('img').removeAttr();
对特定标签执行此操作的一个非常好的理由是清理旧版内容并执行标准。
比方说,例如,您想删除旧版属性,或者通过删除FONT标签属性来限制造成的损坏。
我已经尝试了几种方法来实现这一点,没有包括上面的例子,按需要工作。
示例1:将所有FONT标签replace为包含的文本内容。 这将是一个完美的解决scheme,但从v1.6.2开始已经停止运作。 🙁
$('#content font').each(function(i) { $(this).replaceWith($(this).text()); });
示例2:从命名标签中去除所有属性 – 例如FONT。 再说一次,这个函数无法正常工作,但肯定它曾经在之前的jQuery版本上工作过一次。
$("font").each(function() { // First copy the attributes to remove. var attributes = $.map(this.attributes, function(item) { return item.name; }); // Now remove the attributes var font = $(this); $.each(attributes, function(i, item) { $("font").removeAttr(item); }); });
期待1.7它承诺包括一个方法来删除多个属性的名称。
我不知道你用的是什么,但是你有没有考虑过使用CSS类来切换这些类? 这会减less编码,减less浏览器的工作量。 如果你像使用和height一样快速生成一些属性,这可能不会起作用。
这将删除所有属性,它将适用于每种types的元素。
var x = document.createElement($("#some_id").prop("tagName")); $(x).insertAfter($("#some_id")); $("#some_id").remove();
今天我有同样的问题。 我认为这对你有用
var clone = $(node).html(); clone = $('<tr>'+ clone +'</tr>'); clone.addClass('tmcRow');