是否可以使用jQuery一次性删除所有属性?
<img src="example.jpg" width="100" height="100">
到
<img>
我尝试了$('img').removeAttr('*');
但没有成功。有人知道怎么解决吗?
是否可以使用jQuery一次性删除所有属性?
<img src="example.jpg" width="100" height="100">
到
<img>
我尝试了$('img').removeAttr('*');
但没有成功。有人知道怎么解决吗?
while(elem.attributes.length > 0)
elem.removeAttribute(elem.attributes[0].name);
更新:之前的方法在IE8中可以使用,但在IE8兼容模式和之前的版本中无法使用。因此,这里提供一种使用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();
$.each(this.attributes, function(i, item) { img.removeAttr(item.name) });
- Nik Sumeikofor (var i = this.attributes.length -1; i >= 0 ; i--) { img.removeAttr(this.attributes[i].name); }
- Nik Sumeiko一行代码,无需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());
});
$("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版本,该版本承诺提供一种按名称删除多个属性的方法。
现在我们有removeAttributeNode方法,就不需要再引用属性名来引用id了。
while(elem.attributes.length > 0) {
elem.removeAttributeNode(elem.attributes[0]);
}
一行代码。
$('img').removeAttr(Object.values($('img').get(0).attributes).map(attr => attr.name).join(' '));
这将删除所有属性,并适用于每种类型的元素。
var x = document.createElement($("#some_id").prop("tagName"));
$(x).insertAfter($("#some_id"));
$("#some_id").remove();
我不确定你的具体需求,但你考虑过使用CSS类并切换它们吗?这样可以减少你的编码工作量,也可以减轻浏览器的负担。如果你需要动态生成一些属性,比如宽度和高度,这种方法可能不太容易实现。
今天我遇到了同样的问题。我认为这对你有用。
var clone = $(node).html();
clone = $('<tr>'+ clone +'</tr>');
clone.addClass('tmcRow');