2

挖掘jQuery 源代码后,我仍然无法理解为什么代码如下:

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

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

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

4

2 回答 2

3

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

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

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

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

第五个参数是chainable开关,为arguments > 1.

于 2012-10-12T11:25:29.213 回答
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
于 2012-10-12T11:26:59.387 回答