昨天,我陷入了有关DOM实现怪癖的讨论中,引起了一个有关Text.splitText和Element.normalise行为以及它们应如何表现的有趣问题。
在DOM Level 1 Core中,将Text.splitText定义为...
归一化是...
因此,如果我获取一个包含“Hello World”的文本节点(在textNode中引用),然后执行
textNode.splitText(3)
textNode现在具有内容“Hello”,以及一个包含“World”的新同级
如果我那么
textNode.parent.normalize()
什么是textNode?该规范并未明确指出textNode必须仍然是其先前父级的子级,只是对其进行了更新以包含所有相邻的文本节点(然后将其删除)。删除所有相邻的文本节点,然后使用值的串联重新创建一个新节点,这似乎是一种一致的行为,而textNode指向的树不再是该树的一部分。或者,我们可以以与splitText相同的方式更新textNode,以便它保留其树位置并获取新值。
行为的选择实际上是完全不同的,我无法找到对哪个正确的解释,或者这仅仅是规范中的一个疏忽(似乎在第2或第3级中没有明确说明)。那里的任何DOM/XML专家都可以提供一些帮助吗?
最佳答案
早期,我是DOM工作组的成员。我确定我们要让textNode包含新的联接值,但是如果我们在规范中未说明,则某些实现可能会创建一个新节点而不是重用textNode,尽管这将需要更多的工作。实现者。
如有疑问,请进行防御性编程。
关于xml - DOM应该由splitText和normalization组成以提供身份吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30049/