我有这样一种情况,我需要选择某个元素的所有子元素,但是排除了那些与运行选择器的容器的CSS类相同的容器的子元素。
相当复杂的描述。
<div class="container">
<div class="element"></div>
<div class="element"></div>
<div class="element"></div>
<div class="element">
<div class="container">
<div class="element"></div>
<div class="element"></div>
<div class="element"></div>
</div>
</div>
在最外层的DIV上运行jQuery .find('.element')将得到所有的DIV,甚至是第二个容器中的DIV。这就是我想要避免的。
对于这种情况,有没有快速而简单的jQuery选择器解决方案?
发布于 2011-11-23 04:52:29
我认为您要使用的是not选择器。像这样..。
$(".container").not(".container .container")
或者,您可以使用children选择器从一个级别的深度获取子级。这将排除嵌套的div。
更明确地说,我认为在使用'find‘之后,你会想要使用not选择器。如下所示:
$(".container").find(".element").not($(".container .container .element"))
您可以将一个函数传递给not,这样您就可以让该函数查看每个元素的父元素是否匹配,以查看它是否嵌套在具有相同类的元素中。
removeIfNested = function(index) {
// this is the corrent DOM element
var $this = $(this),
return_value = false;
$.each($this.attr('class').split(/\s+/), function(index) {
if ($this.parents("." + this).length > 0) {
return_value = default_value || true;
}
});
return return_value;
}
$(".container").find(".element").not(removeIfNested);
如果您可以向嵌套容器添加一个类,那么这将是理想的,那么它只是:
$(".container").find(".element").not($(".nested .element"))
假设你将类“嵌套”添加到你的内部容器div中。
发布于 2011-11-23 04:57:07
对于您的特定示例,这将是可行的-
$("body > div.container > .element")
这将只获得顶级元素div。如果你的元素集合在一个不同的结构中,你可以用集合的容器id替换body
。
发布于 2015-10-29 20:16:54
您可以像这样使用jquery选择器:
find('*:not(.container .container *)')
https://stackoverflow.com/questions/8233604
复制相似问题