jquery removeAttr(' id')vz。 removeProp(' ID')

时间:2015-05-04 21:58:55

标签: javascript jquery

有人可以解释我如何以正确的方式从元素中删除id? 我认为jQ prop()也是attr()和removeProp()的新优选形式。 但是如果我尝试通过removeProp删除id(' id'),jQ会将元素的id设置为id =' undefined'。它生成id =' undefined'(我在debuger中看到)的元素,我不认为它是corect。 ID应该在页面上是唯一的。不应该吗? RemoveAttr()按照我的预期从元素中删除id(这意味着元素没有我在debuger中看到的id)。但我不确定这样做的核心方法是什么? 你能解释一下吗? 谢谢!

2 个答案:

答案 0 :(得分:1)

我认为混淆来自jQuery 1.6,其中.attr()函数有时会在检索属性之前考虑属性值。这是不一致的行为。从jQuery 1.6 .prop()开始显式检索属性值和.attr()显式属性。

奇怪的是,.prop()接受元素' disabled属性有效。元素的disabled专长被视为属性而不是属性。

其中,是的,您应该使用.removeAttr()删除id属性。不是.removeProp()

答案 1 :(得分:0)

attrprop之间的区别很简单:第一个获取或设置内容属性(也称为属性),第二个获取或设置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,请更好地删除该属性。