使用JavaScript Rangy在Chrome中的空节点之前插入节点

时间:2012-05-29 15:28:00

标签: javascript html dom rangy

当我在另一个元素的开头处(空|插入位置)尝试在空元素之前插入节点时,我注意到了这个问题。从这开始:

<p>|<span />Some text</p>

我在Rangy范围内使用了range.insertNode()来粘贴一些文字,但在Chrome中我看到了这个结果,其中新节点出现在空<span>之后:

<p><span />|INSERTED TEXTSome text</p>

而不是:

<p>|INSERTED TEXT<span />Some text</p>

请注意,这似乎在IE9中可以正常工作,如果插入没有在<p>节点的开头完成,它也适用于Chrome,例如:

<p>Some |<span />text</p>

结果:

<p>Some |INSERTED TEXT<span />text</p>

这是一个简化的例子,但显示了我所看到的问题。

澄清(如果我接近这个错误的方式,有人可以提出替代方案)我试图插入文本,并且一旦插入完成,总是让光标出现在新插入文本的末尾。

E.g。 <p>|Original Text</p>应该成为<p>INSERTED TEXT|Original Text</p>

但是,插入一个节点会导致插入符号紧接在插入的文本之前(正如文档中说明它应该用于插入节点,因此没有任何投诉)。我试图在插入后使用空<span>作为标记来恢复插入位置(事实上我正在使用Rangy的选择保存和恢复模块为我做这个)。

1 个答案:

答案 0 :(得分:1)

这是因为WebKit不认为<span>之前的位置是有效的插入位置。它与这些Webkit错误有关:

如果范围符合您的预期,Rangy将允许您在所需的位置插入节点,但如果您从选择中获得范围,则范围将反映浏览器的选择概念。可能有一种解决方法,但我不太清楚你正在尝试做什么。