jQuery选择器,带有元素和放大器的排除元素儿童

时间:2010-02-23 21:23:36

标签: jquery jquery-selectors

我有一个用于过滤的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中的一个和所有东西都有这个事件。 我已经有一段时间了,我需要一些帮助。

2 个答案:

答案 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
  }
});

类似的东西