我有一个jQuery事件)触发页面上的每个DOM元素。
现在这很好,但我需要一种方法从DOM选择中排除div(带有子div)以防止触发事件。
我已经在unbind()
上直接尝试了jQuery的not()
,off()
和$('#myDiv')
,但事件仍然在触发。
触发事件的代码:
$("*").each(function () {
// here are events bound to every DOM in the page
$(this).mouseover(mouseover).mouseout(mouseout).click(click);
});
我也试过
$("*:not(#myDiv)").each(function () {
// events
$(this).mouseover(mouseover).mouseout(mouseout).click(click);
});
仍然无法从#myDiv中删除事件。
HTML:
<div id="myDiv">
<div class="data">
<!-- -->
</div>
<div class="debug">
<!-- -->
</div>
<div class="form">
<!-- -->
</div>
</div>
完整DOM选择的最佳方式是什么,但排除 #myDiv,这样我就可以使用bind()
或on()
来绑定事件了?
注意:我不想从DOM树中删除#myDiv,而是将其从选择中排除。
答案 0 :(得分:2)
尝试.not()
$("*").not("#myDiv").each(function () {
$(this).mouseover(mouseover).mouseout(mouseout).click(click);
});
答案 1 :(得分:2)
你可以试试这个
$(function(){
$('body > *').not('#myDiv')
.on('mouseover', function(){ //... })
.on('click', function(){ //... });
});
答案 2 :(得分:1)
如果您也想要排除孩子,您需要明确地这样做:
$("*:not(#myDiv):not(#myDiv *)")
答案 3 :(得分:1)
尝试以下方法:
$("*:not(#myDiv):not(#myDiv *)")
.mouseover(mouseover)
.mouseout(mouseout)
.click(click)
这不仅会排除#myDiv,还会排除#myDiv的任何子元素(您似乎都会这样做)。