jquery.find()只能选择直接的孩子吗?

时间:2015-07-16 18:32:23

标签: javascript jquery angularjs

我应该为jQuery.find()提供什么参数来选择子元素而不是其他元素?我无法通过'>'来领导选择器。并且有' *'将选择所有后代,而不仅仅是直接的孩子。

我知道jQuery.children(),但这是一个库,所以用户能够提供自己的选择器,我想确保他们有一些方法只选择直接的孩子(不添加批次)我自己的逻辑。)

修改

我想使用jQuery.find()只查找父元素的第一级子元素中的元素,而不是子元素的子元素。

示例:

<parent>
  <child-1>
    <child-2></child-2>
  </child-1>
  <child-1>
  </child-1>
</parent>

我想只搜索元素child-1而不是他们的孩子(即孩子2)

*编辑:**

有关更多说明,它是一个表格元素上的Angular指令。该指令需要能够找到表行,但是要用于各种各样的模板,因此它可以有行的选择器。有时,除了原始元素的子div之外,行没有明显的特征;其他时候,这些行是孙子孙女,甚至是曾孙子。

3 个答案:

答案 0 :(得分:3)

如您在问题中提到的那样,使用>启动您的选择器。试试吧:

var s = ".classA",
    n = $('#wrapper').find('>'+s).length;

alert('Found '+ n +' direct children of #wrapper with the "'+ s +'" selector.'); // 3
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<div id="wrapper">
    <div class="classA"></div>     <!-- Selected -->
    <div class="classA">           <!-- Selected -->
        <div class="classA"></div> <!-- Ignored -->
    </div>
    <div class="classC">
        <div class="classA"></div> <!-- Ignored -->
    </div>
    <div class="classB">
        <div class="classB"></div>
    </div>
    <div class="classA"></div>     <!-- Selected -->
</div>

或者使用$.children(),正如您在问题中提到的那样:

var s = ".classA",
    n = $('#wrapper').children(s).length;

alert('Found '+ n +' direct children of #wrapper with the "'+ s +'" selector.'); // 3
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<div id="wrapper">
    <div class="classA"></div>     <!-- Selected -->
    <div class="classA">           <!-- Selected -->
        <div class="classA"></div> <!-- Ignored -->
    </div>
    <div class="classC">
        <div class="classA"></div> <!-- Ignored -->
    </div>
    <div class="classB">
        <div class="classB"></div>
    </div>
    <div class="classA"></div>     <!-- Selected -->
</div>

答案 1 :(得分:1)

我知道jQuery.children(),但这适用于库,因此用户可以提供自己的选择器

但是JQuery的.children()接收选择器作为参数:

  

.children([选择器])
  描述:获取匹配元素集中每个元素的子元素,可选择通过选择器进行过滤。

https://api.jquery.com/children/

答案 2 :(得分:0)

直接子元素>一起使用这是您需要的代码:

elemnt.find("> selector");

这应该可以解决问题。