jQueryソースを掘り下げた後でも、コードが次のような理由を理解できません。
$("div").attr("someAttr", undefined);
2番目の引数が。として設定されているにもかかわらず、jQueryオブジェクトを返しますが、属性値は返しません。value
undefined
JSFiddle: http: //jsfiddle.net/5jn5D/。
jQueryソースを掘り下げた後でも、コードが次のような理由を理解できません。
$("div").attr("someAttr", undefined);
2番目の引数が。として設定されているにもかかわらず、jQueryオブジェクトを返しますが、属性値は返しません。value
undefined
JSFiddle: http: //jsfiddle.net/5jn5D/。
これは、.attr("someAttr", undefined)
(引数が 2 つある) が setter メソッドであり、チェーン可能性のためにオブジェクトを返すためです。引数をundefined
またはその他の任意の値に設定すると、常に同じ効果が得られます。値が何であるかを知っているのに、なぜ値を返す必要があるのでしょうか?
attr
getter メソッドとして (引数を 1 つだけ)使用する.attr("someAttr")
と、属性値を含む文字列が返されます。
ソースの 2003 行目では、引数の長さを明示的にチェックしています。
return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
5 番目の引数はchainable
スイッチで、 に対して true を返しますarguments > 1
。
それはこのビットによるものです:
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 ? ...
}
メソッドがゲッターまたはセッターとして呼び出されたかどうかのチェックは、「値」の値によるものではなく、引数の数によるものであることに注意してください。
arguments.length > 1