2

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

假设给定的元素是#test

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

- 但 -

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

不工作!

编辑:#test我想在点击页面上任何地方但区域 时触发点击事件。

4

5 回答 5

3

我想在点击页面上除区域之外的任何位置时触发点击事件#test

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

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

    // Do stuff
});

jsFiddle 预览

于 2012-05-11T14:50:23.430 回答
1

在您的点击事件中检查点击是否在:http #test: //jsfiddle.net/QDNCS/

$(document).click(function(e) {
    if (!$('#test')[0].contains(e.target)) {
        alert('Yay!');
    }
});​
于 2012-05-11T15:04:07.317 回答
0

系统重启已关闭:

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

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

于 2012-05-11T14:46:51.187 回答
0

我不知道确切的 jQuery 代码,但这个 jQuery 脚本似乎是您正在寻找的。

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

希望这可以帮助

于 2012-05-11T14:47:37.427 回答
0

您可以结合 @The System Restart 和 @topp 的答案来获得请求的行为:

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

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

于 2012-05-11T15:00:48.967 回答