首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery查找.Selector但没有嵌套选择器(.selector .selector)

jQuery查找.Selector但没有嵌套选择器(.selector .selector)
EN

Stack Overflow用户
提问于 2015-11-19 12:32:35
回答 3查看 744关注 0票数 4

我希望找到与选择器匹配的所有元素,但如果它已经包含在匹配的元素中,则不会。

$('#container').find('.child').not('.child .child');

注意,.child元素不是必需的直接子代。

为什么这个不行?

我想选择出现在$('#container').find('.child')中的所有元素,但是排除/filter()在这里的任何元素,因为它的祖先之一是.child

代码语言:javascript
复制
var children = $('#container').find('.child').filter(function (i, el) {
    return !$(el).closest('.child').length;
});

由于某些原因,这两种方法都不起作用,JSFIDDLE

改编自@RonenCypis答案的片段

代码语言:javascript
复制
var selector = ' .child ';
var children = $('#container').find(selector).filter(function(i, el) {
  return !$(el).closest(selector).length;
});
children.css('background-color', 'blue');
代码语言:javascript
复制
#container div {
  float: left;
  display: inline-block;
  width: 50px;
  height: 50px;
  color: #fff;
  margin: 10px;
  background-color: red;
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container">
  <div class="child">one
    <div class="child">one one</div>
  </div>
  <div class="child">two
    <div class="child">two one</div>
  </div>
  <div class="child">three</div>
  <div class="child">four
    <div class="child">four one</div>
  </div>
</div>

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-19 15:24:18

您可以使用parents而不是closest来查找当前元素的祖先。除了祖先之外,closest还匹配当前元素。

代码语言:javascript
复制
var selector = ' .child ';
var children = $('#container').find(selector).filter(function(i, el) {
  return !$(el).parents(selector).length;
});
children.css('background-color', 'blue');
代码语言:javascript
复制
#container div {
  float: left;
  display: inline-block;
  width: 50px;
  height: 50px;
  color: #fff;
  margin: 10px;
  background-color: red;
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container">
  <div class="child">one
    <div class="child">one one</div>
  </div>
  <div class="child">two
    <div class="child">two one</div>
  </div>
  <div class="child">three</div>
  <div class="child">four
    <div class="child">four one</div>
  </div>
</div>

票数 1
EN

Stack Overflow用户

发布于 2015-11-19 12:35:05

可以将选择器:not()选择器结合使用。

代码语言:javascript
复制
$('div').find('[role="tabpanel"]:not(:has([role="tabpanel"]))');
票数 1
EN

Stack Overflow用户

发布于 2015-11-19 12:38:32

JsFiddle中的演示

您可以使用filter()

代码语言:javascript
复制
<div id="container">
    <div class="child">
        <div class="child"></div>
    </div>
    <div class="child"></div>
    <div class="child"></div>
    <div class="child">
        <div class="child"></div>
    </div>
</div>

CSS

代码语言:javascript
复制
#container div {
    display: inline-block;
    width: 50px;
    height: 50px;
    margin: 10px;
    background-color: red;
}

Javascript

代码语言:javascript
复制
var selector = '.child';
var children = $('#container').find(selector).filter(function(i, el){
    return $(el).find(selector).length == 0;
});

children.css('background-color', 'blue');

这段代码将只更改没有附加.child元素的.child元素的背景色。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33804072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档