如何仅选择 div 的子 div(而不是“孙子” div 等)?

Posted

技术标签:

【中文标题】如何仅选择 div 的子 div(而不是“孙子” div 等)?【英文标题】:How can I select only the child divs of a div (and not "grandchildren" divs and so on)? 【发布时间】:2020-02-04 21:03:10 【问题描述】:

我有一个递归函数,可以根据用户的要求在 div 中创建 div,但我偶然发现了一个问题,我需要以特定方式分隔这些 div,类似于“层”。 例子: 我创建了一个 div,firstborn - 在其中,用户创建了另一个 div(我们称之为一个子 div)。在这个辅助 div 中,用户创建了另一个 div(以及这个孙 div) - 我需要知道第一个 div 的子 div 的数量,以及子 div 拥有的子 div 的数量(孙 div)

我偶然发现了这个问题,因为我试图获取它们的方式是:

numberOfFirstbornDivs = document.getElementsByClassName("firstBornDiv").length
numberOfChildrenDivs = document.getElementsByClassName("recursivelyCreatedDiv")[index].getElementsByClassName("recursivelyCreatedDiv").length

我想要的是仅在第一个“层”下名为“recursivelyCreatedDiv”的 div 的数量,但相反,我从所有后续“层”中获取 div 的数量(在给定的示例中,我想要: numberOfFirstbornDivs = 1 和 numberOfChildrenDivs = 1, 但相反,我得到: numberOfFirstbornDivs = 1 和 numberOfChildrenDivs = 2)。

我知道发生这种情况是因为我用相同的 ClassName 命名了我的 div,但我不知道如何解决这个问题,因为它们是递归创建的(并且是根据用户的要求)。

【问题讨论】:

【参考方案1】:

要仅选择元素的直接子元素,您可以使用 '>' css 选择器,而不是通过类名获取元素。

例如,.firstBornDiv > .recursivelyCreatedDiv 将定位所有具有 recursivelyCreatedDiv 类的元素,这些元素是具有 firstBornDiv 类的 div 的直接子元素

编辑 1:更准确地说,您可以将 querySelectorAll() 方法与任何 css 选择器一起使用,以获取选择器所针对的元素数组,这正是您在此答案中所需要的。

【讨论】:

谢谢!这正是我所需要的。 编辑:这不起作用,但确实像它做的那样,不幸的是它并没有解决我的问题。

以上是关于如何仅选择 div 的子 div(而不是“孙子” div 等)?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以仅使用 CSS 选择元素的绝对最后一个孙子? [复制]

如何仅使 Dropzone.js 预览 Div 可点击而不是整个表单

在javascript中仅选择当前单击(div)项

如何选择具有特定 src 的子图像的所有 Div?

影响所有图像的脚本而不是仅包含某些文本的div中的图像(jQuery)

仅获取单击的 div 元素的子元素