排除匹配的DOM&选择的孩子?

时间:2014-07-14 21:01:04

标签: javascript jquery dom jquery-selectors

我想从DOM中选择一组元素及其子元素。

然后,我想在DOM上运行一组排除这些元素的选择,就好像它们已被删除一样。

.not()似乎与父元素和子元素都匹配,并且没有正确排除。

.find(':not(.myclass)')会返回一个包含大量元素的列表,但不能正确排除。

我的麻烦是什么?这看起来很简单,但我期望这样做的功能并不像我期望的那样。

我考虑过克隆DOM,删除元素,然后在克隆的DOM上运行我的选择匹配......但这似乎 。比如,一个重要的表现。

最好的方法是什么?

这是我的代码:

jQuery('html').not(".page-node,.quote").find(selector).each(function(){
//do stuff here to returned elements

.page-node是一个正文类,应该在几乎所有页面上返回body元素,并排除选择器在这些页面上的匹配。

修改:我创建了一个jsFiddle来演示我正在谈论的内容:http://jsfiddle.net/glassdimly/H4tJe/4/

1 个答案:

答案 0 :(得分:2)

Not() 使用适当的后代选择器。跟随任何选择器的*将匹配所有后代(子,孙等)。通过在not中应用它,您可以要求将所有后代排除在匹配之外。由于您还想排除父级,请在not中包含该内容:

e.g。

$(selector).not(".page-node,.page-node *,.quote,.quote *")

等同于: “没有page-node OR和page-node的子/后代”或“没有类quotequote的任何子/后代”

更新了JSFiddle:http://jsfiddle.net/TrueBlueAussie/H4tJe/7/

jQuery(document).find('.list').not('.exclude,.exclude *').each(function(){
    this.remove();
});

等同于“查找所有项目都有类list,但排除任何具有类exclude的项目,并且还排除任何具有类exclude的元素的后代”