2010-12-02 25 views
0

以下に示すように、その中にclickイベントとifステートメントがあります。Jquery - 要素とその中の要素を選択する

if (!$(e.target).is("textarea.textobject, div.texteditor")) 
{ 
    // do stuff 
} 

問題は次のとおりです。 div内のスパンまたはテーブルをクリックしても機能しません。私は試しましたが(div.texteditor> *)、動作しません。

<div class="texteditor"> 
    <span>1</span> 
    <table> 
     <tr><td></td></tr> 
    </table> 
</div> 

だから、基本的にはdiv.texteditorを選択してその中のすべてを網羅したいと思っています。誰もがこれに対する解決を知っていますか?私は私が何かが欠けてると確信している。..

+0

はあなたが表示されことができますか? –

答えて

0

イベントハンドラは、ちょうど(子であってもよい)thisの代わりe.targetを使用し、<div>自体にある場合は、次のように:

if (!$(this).is("textarea.textobject, div.texteditor")) 
{ 
    // do stuff 
} 

.closest()作品であるので

if ($(e.target).closest("textarea.textobject, div.texteditor").length == 0) 
{ 
    // do stuff 
} 

:..if代わりに、あなたは、ターゲットは、これらの2つのセレクタの種類のいずれか内の任意の場所であるかどうかを確認、このような.closest().lengthを、使用したいです現在の要素の両親、それはここでかなり便利です。

+0

e.targetが必要です。実際に私はそれを自分で解決したかもしれません。 これはうまくいくようです。 if(!$(e.target).is( "textarea.textobject、div.texteditor、div.texteditor *")) div.texteditorを選択し、div.texteditorを内部のもので選択します。 – tmutton

+0

@codemonkey - 上記の '.closest()'ソリューションをチェックすることができます。同じことをより効率的に行うでしょう:) –

+0

私はそれが何をしているのか理解していますが、この場合。 – tmutton

0

私は分かりませんが、div内の要素に割り当てられた別のイベントを作成しようとしましたか?それが動作するかどうか、私にはありませんが、それはアイデアだ

if ($(e.target).is("span") && $(e.target).parent("div.texteditor")) 
{ 
    // do stuff 
} 

: 何かのように!

私はそれがあなたを助けてくれることを願っています。 ^^

あなたはすべての子に適用する場合、これは仕事ができる:この `if`文が実行されている場所

if ($(e.target).parent("div.texteditor")) 
{ 
    // do stuff 
} 
+0

これはうまくいくかもしれませんが、divの要素が変更される可能性があるため、 'catch all'が必要でした。 – tmutton

+0

さて、私は答えを編集しました。それがあなたの必要なものかどうかを見てください^^ –