在Chrome中使用JavaScript Rangy在空节点之前插入节点
在另一个元素的开头(pipe |是插入符号位置)尝试在空元素之前插入节点时,我注意到了这个问题。从这一点开始:在Chrome中使用JavaScript Rangy在空节点之前插入节点,javascript,html,dom,rangy,Javascript,Html,Dom,Rangy,在另一个元素的开头(pipe |是插入符号位置)尝试在空元素之前插入节点时,我注意到了这个问题。从这一点开始: <p>|<span />Some text</p> |一些文本 我使用range.insertNode()来粘贴一些文本,但在Chrome中,我看到新节点出现在空的后面: 插入文本一些文本 与此相反: <p>|INSERTED TEXT<span />Some text</p> 插入文本一些文本 请注意,
<p>|<span />Some text</p>
|一些文本
我使用range.insertNode()来粘贴一些文本,但在Chrome中,我看到新节点出现在空的
后面:
插入文本一些文本
与此相反:
<p>|INSERTED TEXT<span />Some text</p>
插入文本一些文本
请注意,这在IE9中似乎正常工作,如果在
节点开始时没有插入,则它也可以在Chrome中工作,例如:
<p>Some |<span />text</p>
一些|文本
结果:
<p>Some |INSERTED TEXT<span />text</p>
一些插入的文本
这是一个简化的示例,但显示了我看到的问题
为了澄清(如果我用错误的方式处理这个问题,有人可能会建议一个替代方案),我正在尝试插入文本,并且在插入完成后,光标总是出现在新插入的文本的末尾
例如,|原始文本
应成为插入文本|原始文本
但是,插入节点会导致插入符号放在插入文本的前面(正如文档中所述,插入节点时应该使用插入符号,因此不会出现任何问题)。我试图使用空<代码> <代码>作为标记来恢复插入之后的插入符号位置(实际上我使用Rangy的选择保存和恢复模块来为我做)。它与这些Webkit bug有关:
如果范围如您所期望的那样,Rangy将允许您在所需的位置插入节点,但如果您从选择中获得了范围,则范围将反映浏览器对选择的想法。也许有办法解决这个问题,但我不太清楚您到底想做什么。更新了我的问题,并做了一些澄清。我想我理解你所说的范围-我从选择中选择范围。有没有一种简单的方法可以问Rangy“你真的在保存/还原标记之后吗?你应该在它之前吗?”@Jason:有多种方法可以做到这一点。在我看来,您不需要保存和恢复步骤,只需执行类似于
var node=document.createTextNode(“插入的文本”);var sel=rangy.getSelection();sel.getRangeAt(0).insertNode(节点);选择折叠(节点,节点长度)代码>啊,是的,这似乎是要走的路。我在实际实现中增加了一些复杂性,因为插入的“文本”实际上可能是html,即“第1行
第2行”。起初我不认为这是个问题,但现在我明白了。
<p>Some |INSERTED TEXT<span />text</p>