2012-01-17 16 views
1

jqueryの新機能です。 this$(this)の違いを知りたい。私は放火犯を使用するとき、私はこの

$.fn.column = function() { 

    var $td = this; 
    var $td1 = $(this); 


}; //end of $.fn.column = function() 

$('#FaqGridForm\\:faqGrid tr td').column(); 

のような関数呼び出しを行ったと仮定し、その後、両方の変数が[td]あります。では、これら2つの違いは何ですか?

+0

の可能複製との間の違いは何ですかこれと$(これ)in jQuery?](http://stackoverflow.com/questions/6965979/what-is-the-difference-between-this-and-this-in-jquery) – adatapost

+0

可能な複製[jQuery $ (これ)対これ](http://stackoverflow.com/questions/1051782/jquery-this-vs-this) –

+0

@Dupes、正しい複製を見つけよう:プラグインのコンテキストで 'this' .. –

答えて

3

jQueryプラグインでは、thisは、すべての一致する要素のjQueryコレクションを指します。この文脈で$(this)を使用することは時代遅れであり、を推奨していません。

たとえば、イベントハンドラのコンテキストでは、thisは、イベントが発生したDOM要素を指します。 $(this)はjQueryオブジェクトにDOM要素をラップするので、jQueryメソッドが利用できます。

コード例:

$.fn.plugin = function() { alert(this); }; 
$('selector').plugin(); //Alerts [object Object] = a jQuery object. 

$('body').click(function() { 
    alert(this); // [object HTMLBodyElement] 
    alert($(this));// [object Object] (a jQuery object) 
}); 
+0

@James Allardice Rory McCrossan。私はちょうど別のものを見つけた。私はこのようなコードを訴えています。$( '#faqGrid tr td')。 ); 'もし私が' var $ tdChildrenArray = this.children();を使うならば。 var $ tdChildrenArray = this.childrenArray = this.children( 'div'); '、' var $ tdChildrenArray = this.children(); '行を実行した後にエラーが発生しますが、' var $ tdChildrenArray = $ this ' .children(); 'なら、エラーはありません。どうして? – Basit

+0

@Basit - この場合、 'this'はjQueryオブジェクトではなくDOM要素を参照するためです。私の答えを見てください。 –

+0

jQueryコールバックの 'this'は通常は** DOM要素を指しますので、' this'はjQueryオブジェクトにラップする必要があります。 **プラグイン**(あなたの質問など)では、 'this'は' plugin'が呼び出されたセレクタと一致するjQueryオブジェクトを常に指しています。 –

0

this問題のネイティブDOM要素です。 DOMメソッドの全範囲を使用することができます。

$(this)は、jQueryオブジェクトにラップされたネイティブDOM要素です。jQueryが提供するすべての関数にアクセスすることができます。これは、必要に応じて要素を修正するためのフレームワークです。また、使用してjQueryオブジェクトを経由してDOM要素自体にアクセスすることができます。これは明らかに外部関数でのjQueryを書くに適用されます

$("#myElement")[0] 

更新

。あなたの例ではプラグインを使用しているので、Rob Wは正しいので、thisは要素を含むjQueryオブジェクトを参照します。

1

この場合、実際の違いはありません。あなたはjQueryを拡張しているので、thisは既にjQueryのインスタンスであり、すべて$(this)はそれをjQueryに再度渡すことはありませんが、これは不要です。

$("#someElem").click(function() { 
    //this is now a reference to a DOM element: 
    console.log(this instanceof jQuery); //false 
    console.log(this.val()); //TypeError 
}); 

あなたは、多くの場合、あなたはそれにjQueryのメソッドを使用できるようにjQueryにthisに合格する必要があります:このようなケースではしかし

$("#someElem").click(function() { 
    console.log($(this) instanceof jQuery); //true 
    console.log($(this).val()); //Prints value 
}); 
+0

2番目の例では、 'this'は' $(this) 'でなければなりません。 –

+0

おっと、よく目撃されました!ありがとう。 –

関連する問題