我想从DOM中选择一组元素及其子元素。
然后,我想在DOM上运行一组选择,排除这些元素,就好像它们被删除了一样。
.not()
似乎同时匹配父元素和子元素,并且没有正确地排除。
.find(':not(.myclass)')
返回一个关于bajillion元素的列表,并且没有正确地排除。
我有什么麻烦?这看起来很简单,但是我希望这样做的函数不像我所期望的那样运行。
我考虑过克隆DOM,删除元素,然后在克隆的DOM上运行我的选择匹配。但这似乎是不好的。就像,一场重大的演出热。
做这件事最好的方法是什么?
下面是我的代码:
jQuery('html').not(".page-node,.quote").find(selector).each(function(){
//do stuff here to returned elements
.page-node
是一个body类,应该在几乎所有页面上返回body元素,并将选择器排除在这些页面上。
编辑:我创建了一个jsFiddle来演示我所说的内容:http://jsfiddle.net/glassdimly/H4tJe/4/
发布于 2014-07-14 21:07:13
Not()
将使用适当的后代选择器。任何选择器后面的*
将匹配所有后代(子女、孙辈等)。通过在not
中应用它,您可以要求将所有后代排除在匹配之外。由于您还希望排除父级,所以也要在not
中包括它:
例如:
$(selector).not(".page-node,.page-node *,.quote,.quote *")
,它等同于:"Not具有类page-node
或和page-node
的子代/后代“或"Not具有类quote
或任何quote
的子代/后代”。
更新的JSFiddle:http://jsfiddle.net/TrueBlueAussie/H4tJe/7/
jQuery(document).find('.list').not('.exclude,.exclude *').each(function(){
this.remove();
});
,它等同于“查找所有项都有类list
,但排除任何也具有类exclude
的项,也不包括任何具有exclude
类的元素的后代”。
https://stackoverflow.com/questions/24745899
复制相似问题