Javascript 用HTML表示文档DOM:同级文本节点

Javascript 用HTML表示文档DOM:同级文本节点,javascript,html,dom,transformation,prose-mirror,Javascript,Html,Dom,Transformation,Prose Mirror,我在一篇讨论下一个sibling值的文章中读到了@Bergi的这句话: x、 nextSibling可能不是跨度,而是换行符文本 img和跨度元素之间的节点 @Bergi所指的示例是一些脚本,用于在相当简单的HTML中选择第一个元素,并查找下一个sibling: 浏览器是否在元素节点之间的DOM中插入换行文本节点?我真正想理解的是,在一个关于使用ProseMirror将文档模型序列化为HTML的老讨论中,有这样一条评论: HTML几乎总是可以用来完全表示文档DOM。 我们遇到了一个例外:同级文本

我在一篇讨论下一个sibling值的文章中读到了@Bergi的这句话:

x、 nextSibling可能不是跨度,而是换行符文本 img和跨度元素之间的节点

@Bergi所指的示例是一些脚本,用于在相当简单的HTML中选择第一个元素,并查找下一个sibling:

浏览器是否在元素节点之间的DOM中插入换行文本节点?我真正想理解的是,在一个关于使用ProseMirror将文档模型序列化为HTML的老讨论中,有这样一条评论:

HTML几乎总是可以用来完全表示文档DOM。 我们遇到了一个例外:同级文本节点。之前 使用ProseMirror,我们发现有兄弟文本很重要 节点,因此我们将HTML序列化为JSON以存储在数据库中。 出于兼容性的原因,我们现在仍然这样做,但考虑到 不再需要同级文本节点,这很可能会被删除 我们的文件格式的下一个版本


该线程中的其余讨论内容非常丰富,与这个问题无关,因此我没有将其链接起来。我认为作者之所以说HTML不能在兄弟文本节点的情况下镜像DOM,是因为换行节点会自动插入DOM,而不是用HTML表示。这准确吗?

我认为你提到的隐藏字符的概念是不准确的。 问题是nextSibling返回dom上的下一个同级元素,这并不意味着它将成为dom上的下一个元素。
如果您想尝试,请删除所有换行符并重试,或者干脆改用nextElementSibling。

当HTML被解析并转换为DOM时,空格会被折叠,在某些情况下会在浏览器之间不一致地删除,例如IE会删除元素之间的多余空格,Firefox会插入一个空文本节点。这就是为什么你不能保证序列化的DOM会与创建它的源完全匹配,即使是在非常小的情况下。如果不知道ProseMirror面临的问题,很难说清楚它到底意味着什么。但是换行节点可以用HTML表示。它可能指的是表示相邻的文本节点。如果文档中有两个相邻的文本节点,将DOM序列化为HTML,然后将其重新解析,则生成的DOM将在该位置包含一个文本节点,而不是两个。如果您想将DOM保留到有两个文本节点的程度,则需要使用不同的格式(如JSON)序列化DOM。@Alohci这听起来就像是将两个相邻的文本节点折叠为一个的问题。谢谢它在ProseMirror中是相关的,因为应用程序可能希望在未来的操作中保持两个相邻节点之间的区别。
<img src="something">
<span>