當在另一個元素(pipe |是插入符號位置)的開始處嘗試在空元素之前插入一個節點時,我注意到了這個問題。與此開始:使用JavaScript在Chrome中的空節點前插入節點Rangy
<p>|<span />Some text</p>
我用range.insertNode()在四肢瘦長範圍粘貼一些文字,但在Chrome中我看到這個結果,其中空<span>
後的新節點出現:
<p><span />|INSERTED TEXTSome text</p>
而不是這樣的:
<p>|INSERTED TEXT<span />Some text</p>
注意,這似乎在IE9中正常工作,如果不將INSERT在<p>
節點它也可以在人權委員會開始進行青梅,例如:
<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的選擇保存和恢復模塊來爲我做)。
更新了我的問題並做了一些說明。我想我明白你對範圍的看法 - 我正在選擇範圍。是否有一種簡單的方法可以問Rangy'你是否在保存/恢復標記之後,當你應該在它之前'? – Jason
@Jason:有很多種方法可以做到這一點。在我看來,你不需要保存和恢復步驟,可以只是做'var node = document.createTextNode(「INSERTED TEXT」); var sel = rangy.getSelection(); sel.getRangeAt(0).insertNode(節點); sel.collapse(node,node.length);' –
啊,是的,這似乎是要走的路。由於插入的「文本」實際上可以是html,即「Line 1
Line 2」,所以我在實際實現中增加了一些複雜性。起初我並不認爲這會是一個問題,但現在我明白了。 – Jason