2017-06-01 82 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/ –