2016-06-19 5 views
-3

jQueryプラグインのチュートリアルからこのコードを入手しました。しかし、私の質問はjavascript/jqueryです。このコードのしくみ(jQuery chaining)

コードでは、filter()がオブジェクトを返します。このオブジェクトには、「フィルタリングされた」オブジェクトのコレクションが含まれています。 append()がそれを操作しています。

私が尋ねるのは、どのように追加機能がすべての要素を操作し、返されたオブジェクトに対して一度しか動作しないかということです。

this.filter("a").append(function() { 
    return " (" + this.href + ")"; 
}); 
+2

あなたの質問はあまり意味がありません。 2番目の段落では、戻りオブジェクトにコレクションが含まれていると言っています... "すべての要素"と "返されたオブジェクト"は同じものです。 – Quentin

+0

私は理解しています。私は言い換えようとします。 – yossi

+1

あなたが何を求めているのか理解していれば(それはどのように機能するのか)、それは範囲の問題です。ドキュメントごとに - http://api.jquery.com/append/#append-function - 'append.function()'は "一致した要素のセットの各要素に対して動作します[...]この関数内では、' this 'はセット内の現在の要素を参照します。言い換えれば、あなたのコードでは、最初の 'this.filter'のスコープは、関数自体の中の' this.href'のスコープと異なります。これは、コレクションを通る反復中に順番に各要素を表します。 –

答えて

1

これはappend(function)の性質上、初期thisとあなたのコード内の関数の内部1間の範囲の違いによるものです。

http://api.jquery.com/append/#append-functionでjQueryのドキュメント当たり

append(function)は上で動作する「マッチした要素の集合内の各要素。[...]関数内で、thisは、セット内の現在の要素を指します。」

したがって、this.filter("a")は、一致する要素を含むjQueryオブジェクトです。関数内のthis.hrefは、コレクション内の繰り返し中に順番にこれらの要素を順番に表します。したがって、テキストは一致するすべての要素に追加されます。

関連する問題