0

如何选择除 div "hola" 和 childrens 之外的所有元素

     <body>
        <div id="hola">
            <div>example</div>
            <span>example</span>
        </div>
        <div>not selected</div>
        <span>not selected</span>
    </body>

    $(document).ready(function() {
        $(":not(#hola > *)").click(function(){
            console.log("sdf");
        });
    });

http://jsfiddle.net/Mp9f4/

4

2 回答 2

2

我很确定您不想选择所有其他项目,因为那将包括body.

试试这个:

$(function() {
    $("body > *:not(#hola)").click(function(){
        console.log("sdf");
    });
});

它选择 的所有直接子级body,除了具有 id 的子级hola

JSFiddle

于 2013-10-29T20:59:45.497 回答
1

看起来您实际上不想选择所有项目,而是处理对除#holadiv 中的项目(元素本身及其子元素)之外的任何项目的点击。

唉,您选择的方式 - 为所有元素#hola及其子元素分配单独的点击处理程序 - 注定会失败,因为点击事件冒泡

我建议稍微不同的方法:仅使用放置的单个事件处理程序document(因为您需要侦听所有元素的点击),并在此处理程序中检查事件的真实目标。例如:

  $(document).click(function(e) {
     var $target = $(e.target);
     if ($target.is('#hola') || $target.closest('#hola').length) {
       return false;
     }
     console.log('sdf');
   });

JS小提琴

于 2013-10-29T22:11:18.520 回答