2013-10-10 10 views
7

私は現在、Web用のMarkdownエディタを構築しています。マークダウンタグは、Rangeインターフェイスを介してHTMLに相当するものを追加することで、リアルタイムでプレビューされます。コードの後に​​、使用されているMDNに係る作業すべき:DOM要素の後に選択範囲を移動

var range = document.createRange() 
var selection = window.getSelection() 

range.setStart(textNode, start) 
range.setEnd(textNode, end + 2) 

surroundingElement = document.createElement('strong') 
range.surroundContents(surroundingElement) 

var cursorRange = document.createRange() 
cursorRange.setStartAfter(surroundingElement) 

selection.removeAllRanges() 
selection.addRange(cursorRange) 

Firefoxが動作します:いくつかの太字テキスト

http://f.cl.ly/items/093R343i23402K190k1t/firefox.gif

クロームない:一部の太字

enter image description here

何が間違っている可能性がありますか?この件に関する情報はまれです。 @Tim下へ


回答

おかげで、私は彼が答えであるに言及リンクのいずれかで記述し、不可視文字の回避策を使用して、それを修正しました。

var range = document.createRange() 

range.setStart(textNode, start) 
range.setEnd(textNode, end + 2) 

surroundingElement = document.createElement('strong') 
range.surroundContents(surroundingElement) 

var selection = window.getSelection() 
var cursorRange = document.createRange() 

var emptyElement = document.createTextNode('\u200B') 
element[0].appendChild(emptyElement) 

cursorRange.setStartAfter(emptyElement) 

selection.removeAllRanges() 
selection.addRange(cursorRange) 

答えて

3

問題がWebKitのは、キャレット(または選択境界が)行くことができる場所についてのアイデアを固定していることであり、あなたが呼ぶとき、あなたの範囲の修正版を選択している:これは私が今使っているコードです。選択のaddRange()メソッド。私はこれについてStack Overflowで数回書いた。

+0

あなたの[Rangy](https://code.google.com/p/rangy/)は、この問題を修正します:ここで例のカップルは? –

+0

@ ream88:悲しいことではない。本当に修正はありませんが、厄介な回避策はありません。 –

+0

invisible charの回避策を使用して修正しました。どうもありがとう、うまくいけば、これらの矛盾はいつか修正されるでしょう。 –