2017-06-01 16 views
0

入れ子要素をクリックして関数をトリガします。泡立ちを防ぐために、私はe.stopPropagation();を使うことができました。jQueryで最も近い要素を見つける

停止伝播の場合、他のスクリプトはこれらの要素のバブリングに依存するため、問題があります。その周りに別の方法がありますか?ある種のif文?

HTML

<div class="nested-element"> 
    <div class="nested-element"> 
    content 
    </div> 
    content 
</div> 

ネスティングは実際の生活の中で無制限です。

jqueryの

$('.selector').on('click', '.nested-element', function(e) { 
    //e.stopPropagation(); 
    console.log($(this)); 
}); 

ルート親が最初に、次いで近い最も近い要素に移動する上記の意志出力。私は最も近い要素を取得したいだけです。

+0

は、 '.parent()このように' – guradio

+0

を使用していないのですか? https://jsfiddle.net/cd1gt6p6/ –

+0

は '.closest'が好きかもしれません – ThisGuyHasTwoThumbs

答えて

2

あなたはtargetをチェックすることができ、ターゲットがクラスの子孫のインスタンスである場合には何も

$(document).on('click', '.nested-element', function(e) { 
 
    if(!$(e.target).closest('.nested-element').not(this).length){ 
 
    console.log('nested-element clicked =', this.id); 
 
    }else{  
 
    console.log('Ignore parent event') 
 
    }  
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="parent" class="nested-element"> 
 
    <div id="child" class="nested-element"> 
 
    child content 
 
    </div> 
 
    parent content 
 
</div>

+0

これは無制限のネストされた要素でもうまくいくようです。他の人のための追加情報として、トピックに関する素晴らしい記事があります:https://css-tricks.com/dangers-stopping-event-propagation/ –

関連する問題