在查找范围

时间:2017-07-10 04:18:07

标签: javascript jquery find selector

请考虑以下代码段作为示例:

<div class="bar foo">
</div>

<div class="bar">
    <div class="foo"></div>
</div>

给定var $set=$('.bar');我需要选择foo类的两个节点。实现这一目标的正确方法是什么?考虑addBack()需要选择器,这里我们需要使用$set jQuery对象,$set.find('.foo')不选择第一个节点。

4 个答案:

答案 0 :(得分:1)

使用它:

var $set =  $(".bar").filters(function () {
    var $this = $(this);
    if($this.is(".foo") || $this.find(" > .foo").length !== 0){
        return true;
    } else{
        return false;
    }
});

答案 1 :(得分:1)

测试一下:

 var $newSet = $set.filter(".foo").add($set.has(".foo"));

答案 2 :(得分:0)

这是实现目标的一种方式:

&#13;
&#13;
var set = $('.bar');
var foos = [];

for (var i = 0; i < set.length; i++) {
  if ($(set[i]).hasClass('foo')) {
    foos.push(set[i]);
  }
}

if (set.find('.foo').length !== 0) {
  foos.push(set.find('.foo')[0]);
}

console.log(foos);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="bar foo"></div>
<div class="bar">
  <div class="foo"></div>
</div>
&#13;
&#13;
&#13;

for循环检查用jQuery&#39; s $('.bar')选取的所有元素,并检查它们是否也有foo类。如果是这样,它会将它们附加到数组中。 if检查set中选取的任何元素是否包含foo类的,并添加它们。

这会创建一个数组,其中包含具有foo类的两个DIV,同时排除仅包含bar的DIV。

希望这会有所帮助:)

答案 3 :(得分:-1)

您可以使用addBack()功能

var $set=$('.bar');
console.log($set.find(".foo").addBack(".foo"));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="bar foo">
</div>

<div class="bar">
    <div class="foo"></div>
</div>