jQuery attr()方法的奇怪行为

时间:2012-10-12 11:21:25

标签: jquery

在挖掘 jQuery sources 后,我仍然无法理解代码为何如此:

$("div").attr("someAttr", undefined);

返回 jQuery对象,但不返回属性值,尽管第二个value参数设置为undefined

JSFiddle: http://jsfiddle.net/5jn5D/

2 个答案:

答案 0 :(得分:3)

这是因为.attr("someAttr", undefined)(带有2个参数)是一个setter方法,因此为了可链接性而返回对象。将参数设置为undefined或任何其他任意值始终会产生相同的效果。如果您知道值是什么,为什么要返回一个值?

如果使用attr作为getter方法(只有一个参数).attr("someAttr"),则返回一个带有属性值的字符串。

源代码中的第2003行明确检查参数的长度:

return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );

第五个参数是chainable开关,对arguments > 1返回true。

答案 1 :(得分:2)

这是由于这一点:

attr: function( name, value ) {
    return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
},

// ...

access: function( elems, fn, key, value, chainable, emptyGet, pass ) {
    // ..
    return chainable ? ...
}

请注意,检查方法是否被调用为getter或setter不是由于“value”的值,而是由于参数的数量:

arguments.length > 1