如何选择除一个元素之外的DOM中的所有元素?

时间:2013-10-16 04:45:16

标签: javascript jquery dom

我有一个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,而是将其从选择中排除。

4 个答案:

答案 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(){ //... });  
});

An Example.

答案 2 :(得分:1)

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

$("*:not(#myDiv):not(#myDiv *)")

答案 3 :(得分:1)

尝试以下方法:

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

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