javascript - 如何获取父容器的所有后代元素?

标签 javascript dom

如何获取父容器的所有后代元素?我想让它们排成一列。

<div class="parent">
    <div class="child1">
        <span class="child2">
            <div class="child3">
                <div class="child4">
                    <span class="child5"></span>
                </div>
                <div class="child6">
                    <div class="class7"></div>
                </div>
            </div>
        </span>

        <div class="child8"></div>
        <span class="child9">
            <div class="child10"></div>
        </span>
    </div>
</div>

我认为递归是一种选择。在第一点我知道 parent 元素。

最佳答案

如果您指的是 children,元素实例有 childNodes(包括非元素子节点,如文本节点)和(在大多数引擎上)children (它只有子元素)。 (你澄清了你的意思是后代。)

如果你的意思是后代,你可以使用querySelectorAll:

var descendants = theElement.querySelectorAll("*");

所有现代浏览器和 IE8 都有 querySelectorAll

它为您提供了一个类似于数组的 NodeList。如果你想要一个真正的 JavaScript 数组,你可以使用 Array.prototype.slice 来获取它,就像这样:

var descendants = Array.prototype.slice.call(theElement.querySelectorAll("*"));

或者您可以使用 Array.from(在 ES2015 中添加,但很容易填充):

var descendants = Array.from(theElement.querySelectorAll("*"));

现在大多数环境都使 NodeList 可迭代(您可以 polyfill it trivially if they don't ),您还可以在 ES2015+ 环境中使用扩展符号:

var descendants = [...theElement.querySelectorAll("*")];

例子:

var descendants = Array.prototype.slice.call(
  document.querySelector(".parent").querySelectorAll("*")
);
descendants.forEach(function(descendant) {
  display(descendant.className);
});
function display(msg) {
  var p = document.createElement('p');
  p.innerHTML = String(msg);
  document.body.appendChild(p);
}
<div class="parent">
    <div class="child1">
        <span class="child2">
            <div class="child3">
                <div class="child4">
                    <span class="child5"></span>
                </div>
                <div class="child6">
                    <div class="class7"></div>
                </div>
            </div>
        </span>

        <div class="child8"></div>
        <span class="child9">
            <div class="child10"></div>
        </span>
    </div>
</div>

关于javascript - 如何获取父容器的所有后代元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26325278/

相关文章:

javascript - 使用 jQuery 递归更改元素类型,为什么它部分起作用?

javascript - Internet Explorer 中的removeAllRanges()

javascript - checkExternalClick 正在做与我想要它做的相反的事情吗?

javascript - jQuery 按标题选择查询

javascript - GatsbyJS 在从其他组件呈现 GraphQL 查询时出现问题

javascript - jQuery-ui droppable 到 iframe 内可排序

javascript - 为什么jQuery或诸如getElementById之类的DOM方法找不到元素?

javascript - 如何创建 jQuery 代码以在同一页面中实现多个 slidetoggle?

JavaScript DOM 问题。 (getElementsByClassName)

javascript - 检查具有特定类名的 div 是否作为 NEIGHBOR 并排存在