我有一个用于过滤的div,我希望它在点击div之外的任何东西时关闭。 我正在尝试构建的选择器,基本上选择除特定元素之外的所有元素并排除其子元素。 这是我尝试过的,但一直无法运作
$('*:not(:has(.exclude *))').live('click', function() {HideFilter();});
页面结构简化为:
<div></div>
<div>
<div></div>
<div>
<div class="exclude"><inputs></div>
</div>
<div></div>
</div>
所以我想要所有的div,但是.exclude中的一个和所有东西都有这个事件。 我已经有一段时间了,我需要一些帮助。
答案 0 :(得分:4)
你试过吗
$('*:not(.exclude, .exclude *)').live( ... )
? [编辑[啊,我知道 - 问题是,即使你排除了这些东西,事件仍然会冒出来。
尝试这样的事情:
$('*').live('click', function(e) {
if (!$(e.target).is('.exclude, .exclude *'))
// do interesting stuff
}
return false;
});
这应该阻止事件在被排除的事物上传播,而不实际做任何事情。
示例页面:http://gutfullofbeer.net/balloon.html
3年后 编辑更新:此时.live()
方法已被长期弃用。最后一个示例在新代码中应如下所示:
$('body').on('click', '*', function(e) {
if (!$(e.target).closest('.exclude').length) {
// do interesting stuff
}
return false;
});
答案 1 :(得分:0)
略有不同的策略:
除了单击div之外的任何内容,关闭所有内容:
$("body").click(function(e){
if($(e.target).hasClass("exclude")){
//show stuff
} else {
//hide stuff
}
});
类似的东西