2011-12-22 5 views
31

:私が試した何jQueryオブジェクトに 'e.target' を比較私が何をしたい

(clickedObject === someDiv) //returns true or false 

($(e.target) === $('.selector')); //returns a false negative. 

私の回避策

($(e.target).attr('class') === $('.selector').attr('class')); //works as intended, not so clean though. 

正しい方法は何ですか私がクリックしたオブジェクトをDOM内のオブジェクトと比較するには?

答えて

32

e.targetにこのクラスがあるかどうかをチェックするには、hasClass関数を使用できます。

if ($(e.target).hasClass("selector")) 

それとも、あなたは本当にオブジェクトを比較したい場合は、jQueryのセレクタは、アイテムのコレクションを返すので、私はあなたがあなたが近くにいる

if (e.target === $('.selector')[0]) 
+0

私のアプローチは動作しませんでした、なぜそれが記述しているので、私は、この答えが好き。 jQueryはアイテムのコレクションを返します。 – dubbelj

+0

@dubbelj - クール - 喜んでそれを助けました:) –

29

をしたいと思うことに注意してください。代わりに.is()を使用してください:ここ

if($(e.target).is('.selector')) { 
    // Your code 
} 

トリックは、あなたがそれをすべての有用なjQueryのメソッドへのアクセスを許可するようにjQueryオブジェクトにe.targetを包むことです。

あなただけe.targetが特定のクラスを持っているかどうかを見ている場合は、.is()の代わりに.hasClass()を使用してみてください:.hasClass()はコードが何をするとして少し明確ではあるが

if($(e.target).hasClass('selector')) { 
    // Your code 
} 

どちらの方法では、動作し、使用するよりも速い.is()

+0

+1はちょうど同じことをタイプしていました。 –

+2

+1 - ブーム - 'nice answer'バッジ: –

+2

@ 32bitkid私は謝罪します;-)私はそれを何度も私に起こしました! – Bojangles

0

$(this)を使用するか、イベントをトリガーする要素を探す場合は$(event.target)を使用してください。

以下は両方の例です。

http://jsfiddle.net/Phunky/TbJef/

あなたはイベントの委任を使用している場合を除き、これらは、しかし、同じ要素がある場合は同じになります。

0

明らかに.is()を使用して関数が最良の解決策です。

あなた自身がこのような比較をやって見つけた場合、次のように埋め込まれたjQueryのメカニズムを使用することが可能であるかどうかをチェックしてみてください:

$(element).on("click", ".selector", function() { 
    alert("clicked"); 
}); 

第二引数.on()方法では、対象選択です。この構成(詳細はhttp://api.jquery.com/on/#direct-and-delegated-eventsを参照)を使用する場合、追加の比較を行う必要はありません。

関連する問題