如何使用 CSS 或 jQuery 选择除给定元素及其后代之外的所有 DOM 元素?
假设给定的元素是#test
$('#test *')
将返回所有#test 后代
- 但 -
$('* :not(#test))')
或$('* :not(#test *))')
或$('*').not('#test')
或$('*').not('#test *')
不工作!
编辑:#test
我想在点击页面上任何地方但区域
时触发点击事件。
如何使用 CSS 或 jQuery 选择除给定元素及其后代之外的所有 DOM 元素?
假设给定的元素是#test
$('#test *')
将返回所有#test 后代
- 但 -
$('* :not(#test))')
或$('* :not(#test *))')
或$('*').not('#test')
或$('*').not('#test *')
不工作!
编辑:#test
我想在点击页面上任何地方但区域
时触发点击事件。
我想在点击页面上除区域之外的任何位置时触发点击事件
#test
。
然后你不需要将点击绑定到每个元素......只需绑定到文档并检查它是否$('#test, #test *')
被点击,如果是,中止点击处理程序:
$(document).on('click', function(e) {
if ($(e.target).is('#test, #test *')) {
return;
}
// Do stuff
});
在您的点击事件中检查点击是否在:http #test
: //jsfiddle.net/QDNCS/
$(document).click(function(e) {
if (!$('#test')[0].contains(e.target)) {
alert('Yay!');
}
});
系统重启已关闭:
$('*').not('#test, #test *')
尽管如此,我不会将事件绑定到该选择器——它可能会选择太多元素并使您的站点运行缓慢。如果发生这种情况,请考虑改用 jquery live()
。
我不知道确切的 jQuery 代码,但这个 jQuery 脚本似乎是您正在寻找的。
http://benalman.com/projects/jquery-outside-events-plugin/
希望这可以帮助
您可以结合 @The System Restart 和 @topp 的答案来获得请求的行为:
$(document).on('click', function (e) {
if ($(this).is('#test, #test *')) {
return;
}
}
注意我没有测试过这段代码。