HTML中有孙子元素吗?

HTML中有孙子元素吗?,html,element,children,Html,Element,Children,我认为这显然是肯定的,但我正在学习的一个教程却告诉我: “就像一个真正的家庭,元素有孩子,孙子, 曾孙辈,等等(尽管我们不区分这一点) HTML—元素的子元素,以及该子元素的所有子元素 第一父母的子女。” 这是惯例还是作者的意见?我已经广泛搜索了W3C,但我找不到任何证据证实这一说法。HTML中没有真正的孙子元素。 但是您可以封装元素,例如 <div id='a'> <div id='b'> <div id='c'> &

我认为这显然是肯定的,但我正在学习的一个教程却告诉我:

“就像一个真正的家庭,元素有孩子,孙子, 曾孙辈,等等(尽管我们不区分这一点) HTML—元素的子元素,以及该子元素的所有子元素 第一父母的子女。”


这是惯例还是作者的意见?我已经广泛搜索了W3C,但我找不到任何证据证实这一说法。

HTML中没有真正的孙子元素。 但是您可以封装元素,例如

<div id='a'>
    <div id='b'>
        <div id='c'>
        </div>
    </div>
</div>

如您所见,b是a的子元素,c是b的子元素。 因此,从逻辑上讲,c是a的孙子元素,尽管没有
HTML中的孙子元素

他说的是你可以无限期地嵌套元素,就像这样

<div class="great-grandparent">
    <div class="grandparent">
        <div class="parent">
            <div class="child"></div>
        </div>
    </div>
</div>

在iPhone上这样做(很抱歉没有附带证据和/或准确的术语),但作为15年以上的web开发人员,我同意只有孩子。这种行为同时出现在CSS和JavaScript中——当您想要在元素中包含某些内容时,您只需像请求一个子元素一样请求它。不管它是否真的是一个子层或更深层的三层以上,该过程都将遍历DOM并标记/利用作为子层或更深层存在的该元素(与需求匹配)的每个实例


因此,虽然我不能指出正式文档可以证实这一点,但任何操作或修改DOM的行为(AFAIR)都符合“仅限儿童”的规范。

不,不是真的。确实,HTML元素或HTML文档中的节点(DOM=文档对象模型)可以有子元素,也可以有父元素

但与许多生物不同的是,没有性别和DNA的混合来创造一个新的节点。实际上,创建新节点甚至不需要父节点。你可以从无到有地创造一个

家谱

那么,这些关系是为了什么?嗯,它们只是为了把它们放在一个层次结构中。HTML文档有一个根节点,它类似于节点的Adam。其他节点可以将此节点作为其“父节点”,这意味着它们只是层次结构中较低的一步

它不是一个节点网络,而是一棵树,因此在层次结构中,总是(最多)有一个节点(我们称之为父节点),在层次结构中处于较高的位置,而在较低的位置则有零个或多个节点。在演讲中,你称之为父母和孩子,因为这是一个很容易理解的与家谱的类比,但这也是比较的终点。只有一个“父级”,它是采用父级,因为它不一定是创建节点的父级

常见的说法包括:

  • 父节点:层次结构中较高的节点(靠近树的主干)
  • 子节点:层次结构中较低的节点(树中当前节点的分支)。您可以使用DOM中节点的属性或来查找
  • 兄弟节点:共享同一父节点的节点
  • 子节点:节点的子节点、孙子节点、曾孙节点
就这么多了。当然,你可以把他们称为祖父母、老伯父、侄子和姐夫,但这会让人更加困惑,所以这并不是真正有用的

孙子也是孩子吗?

现在这篇文章说孙子也是孩子。在某种程度上这是真的

例如,如果您有一个如下所示的CSS选择器:
div img
,它将选择所有
img
元素,这些元素是任何
div
的子元素、孙子元素、曾孙元素等。jQuery和内置函数也严重依赖这种表示法

但是,如果从
JavaScript
中引用元素的
children
属性,则只会得到直接的子元素,而不会得到子元素。实际上,CSS选择器也有这种区别。如果选择
div img
,则会得到子图像,如果选择
div>img
,则只会得到
div
的直接子图像。(见附件)


所以,不,这句话不是真的。节点只有子节点,这些子节点可以有自己的子节点。CSS和JavaScript中有智能选择器,允许您选择家族树中任何“深度”的后代,但这不会使这些节点成为父节点的直接子节点。

父节点的子节点不是其祖辈节点的子节点, 但它们是祖父母的后代

在xpath中使用轴查找节点时,这一点变得更加重要

并非所有html都与xml兼容。但它正在朝这个方向发展。
您可以在脚本标记中使用xpath查找html节点。
因此,注意后代和儿童之间的区别是很重要的

大多数使用xpath的关系使用“子代”而不是“子代”,
严格来说,它是上下文节点的直接子节点。

感谢您的详细回复,这为我彻底澄清了一切!