jQuery中removeAttr(x)
和attr(x, '')
之间通常有区别吗?
如果是,何时使用每一个?
答案 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上根本不起作用。