0

我有一个 jQuery 事件)在页面上的每个 DOM 元素上触发。现在这很好,但我需要一种方法从 DOM 选择中排除一个 div(也有子 div),以防止在它们上触发事件。我已经尝试过 jQuery 的unbind(),not()off()直接 on $('#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,而是将其排除在选择之外。

4

4 回答 4

2

试试.not()

    $("*").not("#myDiv").each(function () {
       $(this).mouseover(mouseover).mouseout(mouseout).click(click); 
    });
于 2013-10-16T04:50:57.157 回答
2

你可以试试这个

$(function(){
    $('body > *').not('#myDiv')
    .on('mouseover', function(){ //... })
    .on('click', function(){ //... });  
});

一个例子。

于 2013-10-16T04:53:15.703 回答
1

如果你也想排除孩子,你需要明确地这样做:

$("*:not(#myDiv):not(#myDiv *)")
于 2013-10-16T04:47:01.680 回答
1

尝试以下操作:

$("*:not(#myDiv):not(#myDiv *)")
    .mouseover(mouseover)
    .mouseout(mouseout)
    .click(click)

这不仅会排除#myDiv,还会排除#myDiv 的任何子元素(您似乎想要)。

于 2013-10-16T04:51:07.980 回答