【问题标题】:Loop through all children of an div循环遍历 div 的所有子元素
【发布时间】:2019-10-23 20:16:34
【问题描述】:

我正忙于一个将从数据库加载一些信息的页面,但要做到这一点,我首先必须声明一些东西。但我需要访问 html 对象中的所有元素。所以如果我的 HTML 代码是这样的:

    <div class="container">
        <div class="parent1">
            <div class="child1ofparent1"></div>
            <div class="child2ofparent1"></div>
            <div class="child3ofparent1"></div>
        </div>
        <div class="parent2">
            <div class="child1ofparent2"></div>
            <div class="child2ofparent2"></div>
            <div class="child3ofparent2"></div>
        </div>
        <div class="parent3">
            <div class="child1ofparent3"></div>
            <div class="child2ofparent3"></div>
            <div class="child3ofparent3"></div>
        </div>
    </div>

我想通过调用 $(".container"); 来遍历所有孩子

我现在的做法是循环遍历所有硬编码的内容,但由于我的学校将使用该应用程序,因此有些事情需要更加灵活。

我已经试过了:

$(".container > *").each(function(i, element) {
       console.log(element);
    });

但这只会返回第一个孩子(.parent1、.parent2、.parent3)。

【问题讨论】:

  • 递归是你的朋友

标签: javascript jquery loops parent children


【解决方案1】:

您正在使用child combinator - ".container &gt; *"。请改用descendant combinator - ".container *"

$(".container *").each(function(i, element) {
  console.log(element);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
  <div class="parent1">
    <div class="child1ofparent1"></div>
    <div class="child2ofparent1"></div>
    <div class="child3ofparent1"></div>
  </div>
  <div class="parent2">
    <div class="child1ofparent2"></div>
    <div class="child2ofparent2"></div>
    <div class="child3ofparent2"></div>
  </div>
  <div class="parent3">
    <div class="child1ofparent3"></div>
    <div class="child2ofparent3"></div>
    <div class="child3ofparent3"></div>
  </div>
</div>

【讨论】:

    【解决方案2】:

    虽然其他答案是正确的,但如果可能,应不鼓励使用通用选择器 (*),因为它匹配任何元素,而不仅仅是您要查找的元素,具体取决于您的 DOM 树,可能会对您的性能产​​生重大影响。您可以使用如下所示的属性选择器:

    $(function () {
    
      var $output = $('#output');
    
      $('.container [class^="child"]').each(function () {
        var $this = $(this);
        $('<li />', { text: $this.prop('nodeName') + " w/ class " + $this.attr('class') }).appendTo($output);
      });
    
    });
    h1 {
      font-family: Arial, sans-serif;
      font-size: 16;
    }
    #output {
      list-style-type: square;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div class="container">
            <div class="parent1">
                <div class="child1ofparent1"></div>
                <div class="child2ofparent1"></div>
                <div class="child3ofparent1"></div>
            </div>
            <div class="parent2">
                <div class="child1ofparent2"></div>
                <div class="child2ofparent2"></div>
                <div class="child3ofparent2"></div>
            </div>
            <div class="parent3">
                <div class="child1ofparent3"></div>
                <div class="child2ofparent3"></div>
                <div class="child3ofparent3"></div>
            </div>
        </div>
        <h1>Selected Elements:</h1>
        <ul id="output"></ul>

    参考:Attribute Starts With Selector [name^=”value”]

    【讨论】:

      【解决方案3】:

      这将返回所有以.container为祖先的孩子

          $("*", ".container").each(function(i, element) {
             console.log(element);
          });
      

      【讨论】:

      • 并非如此,这个选择器实际上会选择页面的每一个元素;将逗号 (,) 视为 or 运算符。
      • 这是一个or 选择,它将返回页面上的所有元素。不完全是 OP 正在寻找的......
      • $("a, b") 是 a 或 b。 $("a", "b") 适用于 a 中的所有 b
      【解决方案4】:

      你很亲密。 ".container &gt; *" 表示只寻找孩子,而不是所有后代。

      删除&gt; 符号以循环后代。

      $(".container *").each(function(i, element) {
        console.log(element.classList[0]);
      });
      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      <div class="container">
              <div class="parent1">
                  <div class="child1ofparent1"></div>
                  <div class="child2ofparent1"></div>
                  <div class="child3ofparent1"></div>
              </div>
              <div class="parent2">
                  <div class="child1ofparent2"></div>
                  <div class="child2ofparent2"></div>
                  <div class="child3ofparent2"></div>
              </div>
              <div class="parent3">
                  <div class="child1ofparent3"></div>
                  <div class="child2ofparent3"></div>
                  <div class="child3ofparent3"></div>
              </div>
          </div>

      【讨论】:

      • 我也在想同样的事情Scott。这与接受的答案相同。看不出有什么不妥。 +1
      【解决方案5】:

      我自己的建议。使用 div 来确定您想要的嵌套级别。

      供第一个父母使用

      $(".container > div").each(function(i, element) {
        console.log(element);
      });
      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      <div class="container">
        <div class="parent1">
          <div class="child1ofparent1"></div>
          <div class="child2ofparent1"></div>
          <div class="child3ofparent1"></div>
        </div>
        <div class="parent2">
          <div class="child1ofparent2"></div>
          <div class="child2ofparent2"></div>
          <div class="child3ofparent2"></div>
        </div>
        <div class="parent3">
          <div class="child1ofparent3"></div>
          <div class="child2ofparent3"></div>
          <div class="child3ofparent3"></div>
        </div>
      </div>

      仅限有父母使用的孩子

      $(".container div div").each(function(i, element) {
        console.log(element);
      });
      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      <div class="container">
        <div class="parent1">
          <div class="child1ofparent1"></div>
          <div class="child2ofparent1"></div>
          <div class="child3ofparent1"></div>
        </div>
        <div class="parent2">
          <div class="child1ofparent2"></div>
          <div class="child2ofparent2"></div>
          <div class="child3ofparent2"></div>
        </div>
        <div class="parent3">
          <div class="child1ofparent3"></div>
          <div class="child2ofparent3"></div>
          <div class="child3ofparent3"></div>
        </div>
      </div>

      对于所有孩子:父母和孩子使用

      $(".container div").each(function(i, element) {
        console.log(element);
      });
      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      <div class="container">
        <div class="parent1">
          <div class="child1ofparent1"></div>
          <div class="child2ofparent1"></div>
          <div class="child3ofparent1"></div>
        </div>
        <div class="parent2">
          <div class="child1ofparent2"></div>
          <div class="child2ofparent2"></div>
          <div class="child3ofparent2"></div>
        </div>
        <div class="parent3">
          <div class="child1ofparent3"></div>
          <div class="child2ofparent3"></div>
          <div class="child3ofparent3"></div>
        </div>
      </div>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-24
        • 2017-04-29
        • 2015-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-24
        • 1970-01-01
        相关资源
        最近更新 更多