7

我目前正在为网络构建一个 Markdown 编辑器。Markdown 标记通过Range接口附加其 HTML 等效项来实时预览。使用以下代码,它应该根据 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)

Firefox 工作:一些粗体文本

在此处输入图像描述

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

1 回答 1

3

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

于 2013-10-10T22:56:58.647 回答