从DOM选择中排除元素及其后代

时间:2012-05-11 14:32:17

标签: jquery css dom jquery-selectors

如何使用CSS或jQuery选择除给定元素及其后代之外的所有DOM元素?

说给定元素是#test

$('#test *')将返回所有#test后代

- 但 -

$('* :not(#test))')$('* :not(#test *))')$('*').not('#test')$('*').not('#test *')

不起作用!

修改 我想在点击页面上的任何位置但#test区域时触发点击事件。

5 个答案:

答案 0 :(得分:3)

  

我想在点击页面上的任意位置时触发点击事件,但#test区域。

然后你不需要将click绑定到每个元素...只需绑定到文档并检查它是否被$('#test, #test *')命中,如果是,则中止点击处理程序:

$(document).on('click', function(e) {
    if ($(e.target).is('#test, #test *')) {
        return;
    }

    // Do stuff
});

jsFiddle preview

答案 1 :(得分:1)

在点击事件中,检查点击是否在#testhttp://jsfiddle.net/QDNCS/

$(document).click(function(e) {
    if (!$('#test')[0].contains(e.target)) {
        alert('Yay!');
    }
});​

答案 2 :(得分:0)

系统重启已关闭:

$('*').not('#test, #test *')

尽管如此,我不会将事件绑定到该选择器 - 它可能会选择太多元素并使您的网站工作缓慢。如果发生这种情况,请考虑使用jquery的live()代替。

答案 3 :(得分:0)

我不知道确切的jQuery代码,但是这个jQuery脚本似乎就是你要找的。

http://benalman.com/projects/jquery-outside-events-plugin/

希望这有帮助

答案 4 :(得分:0)

您可以将@The System Restart和@topp的答案组合起来以获取所请求的行为:

$(document).on('click', function (e) {
    if ($(this).is('#test, #test *')) {
        return;
    }
}

注意我还没有测试过这段代码。