Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Chrome中使用JavaScript Rangy在空节点之前插入节点_Javascript_Html_Dom_Rangy - Fatal编程技术网

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

在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> 插入文本一些文本 请注意,

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

<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>