代码之家  ›  专栏  ›  技术社区  ›  Adam Wright

dom是否应该拆分文本并正常化组合以提供标识?

  •  7
  • Adam Wright  · 技术社区  · 16 年前

    昨天我卷入了一个关于DOM实现特性的讨论中,其中产生了一个关于text.splittext和element.normalize行为以及它们应该如何行为的有趣问题。

    DOM Level 1 Core ,text.splittext定义为…

    将此文本节点在指定的偏移量处断开为两个文本节点,并将这两个节点作为兄弟节点保留在树中。然后,该节点只包含到偏移点为止的所有内容。一个新的文本节点,作为该节点的下一个同级插入,包含偏移点处和偏移点后的所有内容。

    Normalise是…

    将此元素下面的子树的全部深度中的所有文本节点放入“普通”表单,其中只有标记(例如,标记、注释、处理说明、CDATA节和实体引用)分隔文本节点,即没有相邻的文本节点。这可用于确保文档的DOM视图与保存和重新加载时的视图相同,并且在使用依赖于特定文档树结构的操作(如xpointer查找)时非常有用。

    所以,如果我取一个包含“hello world”的文本节点(在text node中引用),并执行

    textNode.splitText(3)
    

    textnode现在有了内容“hello”,还有一个包含“world”的新兄弟。

    如果我当时

    textNode.parent.normalize()
    

    什么是textnode ?规范没有明确说明textnode必须仍然是它以前父级的子级,只是更新后包含所有相邻的文本节点(然后删除)。删除所有相邻的文本节点,然后用值的串联重新创建一个新节点,从而使text node指向不再是树的一部分的某个对象,这似乎是一种一致的行为。或者,我们可以像splittext一样更新textnode,这样它就保留了它的树位置,并得到一个新的值。

    行为的选择是非常不同的,我找不到关于哪个是正确的,或者这只是规范中的一个疏忽(在第2或3级中似乎没有澄清)。任何一个DOM/XML专家都能为我们提供帮助吗?

    3 回复  |  直到 16 年前
        1
  •  4
  •   David Singer    16 年前

        2
  •  1
  •   Sam Brightman    16 年前

    textNode splitText

        3
  •  1
  •   Adrian Mouat    16 年前