在jQuery中removeAttr(x)与attr(x,'')

时间:2010-11-18 16:55:37

标签: jquery

jQuery中removeAttr(x)attr(x, '')之间通常有区别吗?

如果是,何时使用每一个?

5 个答案:

答案 0 :(得分:9)

鉴于从jQuery库中删除了removeAttr(见下文)。我会说是的。

removeAttr: function( name, fn ) {
        return this.each(function(){
            jQuery.attr( this, name, "" );
            if ( this.nodeType === 1 ) {
                this.removeAttribute( name );
            }
        });

来源:Jquery 1.4.3 uncompressed version

虽然它本质上是主观的。我认为使用removeAttr是一种更自我记录的方法。但是,我可以看到其他人正在思考相反的事情。

答案 1 :(得分:6)

它们的操作完全不同:

attr(x,'')将属性设置为空字符串

removeAttr(x)会删除对象上的属性(如果可能),或者将其删除并将其重置为默认值(如果DTD为该对象类定义的话)。

答案 2 :(得分:3)

.removeAttr(x);相当于.removeAttribute("x");,而.attr(x, '')只是将.x设置为空字符串。有关详细信息,请参阅jQuery removeAttr ref和相应的mozilla removeAttribute ref

答案 3 :(得分:3)

某些属性是布尔值(无论它们是否存在)。以属性disabled为例。如果它存在则为真,则设置的值无关紧要。因此,您必须使用.removeAttr('disabled')再次启用该元素。但是,jQuery确实对它进行了规范化,你可以使用.attr('disabled', false);所以我猜答案是语义。

修改

这个答案刚刚得到一些提示,几年前我就回答了这个问题。

使用此代替属性 -

.prop('disabled', true) // set as disabled
.prop('disabled', false) // set as enabled
.prop('disabled') // return boolean (is this disabled?)

不要使用removeProp('disabled'),因为这会从DOM对象中删除属性(这不是你想要做的)。

答案 4 :(得分:2)

第一个区别:

.removeAttr('name')  // try to remove the attribute 'name' from the DOM
.attr('name', '')    // set the attribute 'name' to empty string

第二个区别,可能只发生在我身上,.removeAttr()在Firefox和IExplorer中正常工作,但在Chrome中效果不佳,在Safari上根本不起作用。