1

通常、親要素内の子要素がクリックされたかどうかを確認したい場合は、次のようなものを使用します。

$(document).click(function (e) {
    alert($(e.target).is("#somediv *"));
}

しかし今、私はsomediv変数に を持っています。私が試してみました:

var somediv = $(this);
$(document).click(function (e) {
    alert($(e.target).is($(somediv, "*")));
}

しかし、うまくいきません。どうやってやるの?要素または子要素がクリックされたかどうかを検出する最良の方法はありますか?

4

4 に答える 4

5

somedivが DOM 要素であるかセレクターであるかに関係なく、 .closest [docs]を使用します。

if ($(e.target).closest(somediv).length > 0)

これは DOM を上方向にトラバースし、 から開始して、e.target祖先 (または要素自体) が であるかどうかをテストしますsomediv。を除外する場合はe.target、その親から始めます。

$(e.target).parent().closest(somediv)

全体的なコンテキストに応じて、別の方法として、イベント ハンドラーをsomediv次のように単純にバインドすることもできます。

somediv.click(function() {
   // click originated from inside the div
});

既存の DOM 要素からセレクターを作成する簡単な方法はありません。セレクターsomedivが含まれている場合は、文字列連結を使用して結合できます。

$(e.target).is(somediv + ' *');    
于 2012-09-28T15:50:40.667 に答える
1

以下を試してください、

デモ: http://jsfiddle.net/GUAFW/2/

$(function () {
    var somediv = $('#container');
    $(document).click(function (e) {
        alert($(e.target).parent().is(somediv));
        //                   ^__ Just immediate childrens :(
    });
});

e.target != thisハンドラー内で実行して、それが親要素か子要素かを確認できます。

例:

HTML:

<div id="container">
   <div class="child"></div><div class="child">
</div>

JS:

$(function () {
    $('#container').click(function (e) {
        alert(e.target != this);
    });
});
于 2012-09-28T15:55:51.377 に答える
0

someDiv要素の文字列リテラル識別子があると仮定すると#、接頭辞は付けられないため、次のようになります。

$(document).click(function (e) {
  if ($(e.target).is("#" + somediv + " *")) {
    // some code
  } 
}
于 2012-09-28T15:48:46.500 に答える
0

このアプローチを試してください.. is() の代わりに等値セレクターを使用してみてください..

<div  class="hide"> 
    <span class="green" id="somediv"> YOOO </span>
</div>​

$('div').click(function(e) {
    if (e.target != this) {
        alert(((e.target.id) == 'somediv'));
    }
});​

フィドルをチェック

于 2012-09-28T15:49:08.103 に答える