我想从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/
答案 0 :(得分:2)
Not()
将使用适当的后代选择器。跟随任何选择器的*
将匹配所有后代(子,孙等)。通过在not
中应用它,您可以要求将所有后代排除在匹配之外。由于您还想排除父级,请在not
中包含该内容:
$(selector).not(".page-node,.page-node *,.quote,.quote *")
等同于:
“没有page-node
OR和page-node
的子/后代”或“没有类quote
或quote
的任何子/后代”
jQuery(document).find('.list').not('.exclude,.exclude *').each(function(){
this.remove();
});
等同于“查找所有项目都有类list
,但排除任何具有类exclude
的项目,并且还排除任何具有类exclude
的元素的后代”