在DOM元素之后移动选择

Mar*_*her 7 javascript firefox google-chrome range selection

我目前正在为网络构建Markdown编辑器.通过Range接口附加HTML等效项,实时预览Markdown标记.使用以下代码,该代码应根据MDN工作:

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)
Run Code Online (Sandbox Code Playgroud)

Firefox的工作原理:一些粗体文字

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

Chrome不是:一些粗体文字

在此输入图像描述

有什么建议可能是错的吗?有关此主题的信息很少见.


回答

感谢@Tim Down,我使用他在回答中提到的一个链接中描述的隐形字符解决方法修复了它.这是我现在使用的代码:

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) 
Run Code Online (Sandbox Code Playgroud)

Tim*_*own 3

问题是 WebKit 对于插入符(或选择边界)可以去哪里有固定的想法,并且在调用选择的addRange()方法时选择范围的修改版本。我已经在 Stack Overflow 上写过几次关于这个问题的文章;这里有几个例子: