2012-01-03 9 views
9

私はしばしばjqueryでキーワードthisを使用する例を見ます。ときどき私は$と括弧で、それ以外の時は使われているのを見ます。そして、私はそれがそれぞれ少しずつ使われているのを見たと思った。

ので、

var id = this.attr('id'); 

var id = $(this).attr('id'); 

var id = $this.attr('id'); 

は、これらはすべて同じですか?好ましい方法がありますか? thisはjavascriptのもので、$(this)はjQueryのものですか?もしそうなら、$thisはどこに落ちますか?

これはおそらく初心者の質問ですが、私は単純に、thisを働かせることができませんでした。私は$(this)しか動かすことができません。私が何か間違っているのかどうか、私がタイプミスで例を読んでいるのかどうかは分かりません。

+1

'this'はjs自己参照で、$()を置くだけでjqueryクラスがラップされます。これは$ thisを参照しています - これは変数名(あらかじめ定義されていません)で、jqueryプラグインでは通常、子クラスの第1レベルの親クラスへの参照を持つために使用されます –

答えて

10

thisはJavaScriptのものです。これは、関数が実行されている "コンテキスト"を参照します。ほとんどのイベントハンドラでは、イベントをリッスンしているのは(未処理の)DOM要素です。他の状況では、それは他の事柄を意味します。グーグル "this JavaScriptで"啓発されている可能性があります。


私は、あなたが代わりに通常のもののattrのようなjQueryのメソッドを使用できるようにjQueryのは、多くの場合、jQueryのラッパーでラップにプレーンDOM要素を使用しているため、「生」のDOM要素(getAttributeであると言いますsetAttributeなど)。このラッピングは、$関数で実行されます。ここには$(this)があります。例えば:

this.getAttribute("href") 
/* or */ someElement.getAttribute("href") 

$(this).attr("href") 
/* or */ $(someElement).attr("href") 

$this又はthis$同じであるだけ変数名です。しかし、それはしばしば

var $this = $(this); 

のような割り当てを行うことが一般的である。この理由は、継続的にそれが毎回新しいjQueryのラッパーオブジェクトを作成して、やや高価である$機能を呼び出す避けるためです。ラップされた要素を変数に格納すると、効率が少し向上します。


まれに、thisが既にjQueryラッパーである可能性があります。 jQueryプラグインを書くときに私が頻繁に出てくるケースがあります。その場合は、すでにラップされているので、最初にラップすることなくthis.attr("id")のような処理を直接行うことができます。通常の場合(イベントハンドラ、$.eachなど)、ラッパーが必要です。 を複数回呼び出す代わりに

+0

+1素晴らしい答え。非常に徹底的。 – ThinkingStiff

+0

ええ、素晴らしい答え。そしてその最後の部分は私がどこかに読んだことを説明するのに役立ちますが、もう一度それを見つけることができます。私は 'this.attr(" id ")'が使用されているのを見ましたが、それは私のためには機能しませんでした。私はそれが私を最も混乱させるものだと思う。 –

5

thisは、現在のオブジェクトを参照するネイティブのJavascriptオブジェクトです。 jQuery.fn.で定義されたjQuery関数では、thisは単独でjQueryオブジェクトです。 $(this)は、jQueryのjavascript thisをjQueryオブジェクトに変換する方法です。 $thisは単なる変数名です。定義していない場合はundefinedとなります。

ここthisのjQueryの使用方法の良い説明です:

http://www.learningjquery.com/2007/08/what-is-this

+1

'this'はイベントハンドラでのみ使用されるわけではありません。現在のオブジェクトへの参照です。詳しい説明は次のとおりです:http://justin.harmonize.fm/index.php/2009/09/an-introduction-to-javascripts-this/ – voithos

+0

@voithosありがとう。更新しました。 – ThinkingStiff

8

「この」現在のオブジェクトを参照するためのJavaScriptオブジェクトのキーワードである、「$(これは)」はjQueryのラッパー関数であります現在のオブジェクトをjQueryオブジェクトに変換します。 '$ this'が表示されているときは、通常、開発者が$(this)オブジェクトを参照するために作成した変数を参照します。たとえば、

$(function(){ 
    $('a').click(function(){ 
    var $this = $(this); // refers to the $('a') object 
    $('div').each(function(){ 
     $(this).hide(); // $(this) refers to each 'div' in the loop, not the $('a') 
     $this.css({ color: 'blue' }); // turns the link element text blue 
    }); 
    }); 
}); 
+0

あなたは答えを解説して、普通の「this」が出現する可能性があることを示すことができます – veeTrain

+0

この状況でプレーンな「this」を使用する唯一の理由は、生のDOM Nodeのメソッドや変数にアクセスする必要がある場合ですここでは:http://www.w3schools.com/jsref/dom_obj_node.asp 例えば、this.hide();のようなプレーンな 'this'でjQueryメソッドを使用することはできません。 – afrederick

+0

ああ...そうだ。そうすれば、あなたが 'this 'で実行する「操作」がブラウザ間で非互換である可能性があると言うのは安全でしょうか? '$()'でそれをラップし、jQueryメソッドを使うのはもっと安全でしょうか? OPがそれについて知りたがっているので、 'this'の意味を反映するためにあなたの答えを更新するのが良いかもしれません。 – veeTrain

1

を呼び出す代わりに、変数として格納する方が効率的です(通常は$thisと呼ばれます)。

関連する問題