是否可以使用 jQuery 一次删除所有属性?
<img src="example.jpg" width="100" height="100">
到
<img>
我试过$('img').removeAttr('*');
没有运气。任何人?
是否可以使用 jQuery 一次删除所有属性?
<img src="example.jpg" width="100" height="100">
到
<img>
我试过$('img').removeAttr('*');
没有运气。任何人?
一个不需要 JQuery 的简单方法:
while(elem.attributes.length > 0)
elem.removeAttribute(elem.attributes[0].name);
更新:之前的方法在 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:
[...elem.attributes].forEach(attr => elem.removeAttribute(attr.name));
jQuery.fn.removeAttributes
您可以扩展 jQuery 的现有.removeAttr()
方法,使其接受零参数以从集合中的每个元素中删除所有属性,而不是创建一个新的(在已接受的答案中演示):
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 标签。这将是完美的解决方案,但自 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,它Promise包含一种按名称删除多个属性的方法。