12

次のようにクリックイベントを追加しました。ターゲットに特定の親があるかどうかを確認したいと思います。

$(document).click(function(event){
    // Check here if target has specific parent for example -> #parent
});

これはどのように行うことができますか?

4

4 に答える 4

22

このための.parent() domトラバーサルメソッドがあります。

Pointyの水晶玉によると、おそらく次のようなことをしたいと思うでしょう。

$(document).click(function(event) {
  if ($(event.target).parents('.selector').length > 0) {
  }
});

なぜドキュメントにクリックハンドラーを設定しているのかわかりません。おそらくイベントの委任と.on()を探していますか?

于 2012-08-30T15:23:10.517 に答える
5

これも機能すると思います。AFAIKjQueryイベントは、イベントを呼び出すときにjQueryオブジェクトの代わりにリテラル要素を使用します。基本的thisには、通常のJavaScriptプロパティを持つ通常のDOM要素である必要があります。

$(document).click(function(event)
{
   let myparent = $(this.parentNode); //jquery obj
   let parent = $(this.parentNode)[0]; //plain DOM obj

   let myself = $(this); //jquery obj;
   let $elf = this; //plain DOM obj
});

注:変数として「self」を使用することは悪い/特定のライブラリとの競合を引き起こすことがあるので、$elfを使用しました。$elfの$は特別ではありません。jQueryの規則などではありません。

于 2014-03-31T15:48:10.113 に答える
2

私は過去にこれを確実に使用しました:

var target = $( event.target )

これにより、イベントが呼び出された要素のjQueryオブジェクトへの参照が提供されます。これと同じアプローチを使用して、親が「#parent」であるかどうかを確認できます。次のようになります。

var target = $( event.target )
if (target.parent().attr('id') == "#parent") {
    //do something
}
于 2012-08-30T15:29:27.493 に答える
2
$(document).click(function(event){
    var $parent = $(this).parent();

     // test parent examples 
    if($parent.hasClass('someclass')) { // do something }

    if($parent.prop('id') == 'someid')) { // do something }

    // or checking if this is a decendant of any parent

    var $closest = $(this).closest('someclass');

    if($closest.length > 0 ) { // do something }

    $closest = $(this).closest('#someid'); 

    if($closest.length > 0 ) { // do something }
});
于 2012-08-30T15:23:49.600 に答える