有人可以解释我如何以正确的方式从元素中删除id? 我认为jQ prop()也是attr()和removeProp()的新优选形式。 但是如果我尝试通过removeProp删除id(' id'),jQ会将元素的id设置为id =' undefined'。它生成id =' undefined'(我在debuger中看到)的元素,我不认为它是corect。 ID应该在页面上是唯一的。不应该吗? RemoveAttr()按照我的预期从元素中删除id(这意味着元素没有我在debuger中看到的id)。但我不确定这样做的核心方法是什么? 你能解释一下吗? 谢谢!
答案 0 :(得分:1)
我认为混淆来自jQuery 1.6,其中.attr()
函数有时会在检索属性之前考虑属性值。这是不一致的行为。从jQuery 1.6 .prop()
开始显式检索属性值和.attr()
显式属性。
奇怪的是,.prop()
接受元素' disabled
属性有效。元素的disabled
专长被视为属性而不是属性。
其中,是的,您应该使用.removeAttr()
删除id
属性。不是.removeProp()
答案 1 :(得分:0)
attr
和prop
之间的区别很简单:第一个获取或设置内容属性(也称为属性),第二个获取或设置IDL属性(也称为属性)。
当存在具有相同名称的属性和属性时,通常首选prop
,因为它显示元素的当前状态。
例如,value
元素的input
属性是其当前值。其value
属性是其初始值(与defaultValue
属性相同)。
请注意,这不是id
的情况,因为属性reflects属性,因此它们始终相同。
如果要删除,则会有所不同。您可以自由删除属性,但属性不可删除。那是因为这些属性是作为继承的getter / setter实现的,但只能删除自己的属性。
var el = document.createElement('div');
el.id = 'foo';
el.hasOwnProperty('id'); // false
delete el.id; // Does not delete
el.id; // "foo"
在jQuery 1中,deleteProp
的实现与
removeProp: function( name ) {
name = jQuery.propFix[ name ] || name;
return this.each(function() {
// try/catch handles cases where IE balks (such as removing a property on window)
try {
this[ name ] = undefined;
delete this[ name ];
} catch( e ) {}
});
}
因此,id
因"undefined"
而成为this[ name ] = undefined;
。
在jQuery 2中,他们将其更改为
removeProp: function( name ) {
return this.each(function() {
delete this[ jQuery.propFix[ name ] || name ];
});
}
因此,现在deleteProp('id')
不会改变id
。
因此,如果您要删除id
,请更好地删除该属性。