The*_*lob 7 javascript highlighting
我正在使用mouseup事件来触发一个突出显示文本的函数,并用一个span来覆盖突出显示的文本(来自堆栈溢出的函数):
function highlightText(e) {
var t = window.getSelection().toString();
if (t) {
$("#mySpan").remove();
var range = window.getSelection().getRangeAt(0);
newNode = document.createElement("span");
newNode.id = 'mySpan';
range.surroundContents(newNode);
}
}
Run Code Online (Sandbox Code Playgroud)
我遇到的主要问题是,只要surroundContents包含,文本仍然只突出显示大约20%的突出显示尝试(否则突出显示立即消失).我尝试添加一个setTimeout,而不是为1s调用surroundContent.我也尝试删除remove()语句,但仍然没有好处.
有关为什么会发生这种情况的任何想法?
失败的可能原因是所选文本仅包含非文本节点的开头或结尾,而不是两者。
因此,如果运行该代码时仅选择下面的“This is Bo”,它将失败(并引发异常),因为它也不会捕获选择中的结束标记:
This is <em>bold</em>
Run Code Online (Sandbox Code Playgroud)
所以最终结果是:
This is <em>bo
Run Code Online (Sandbox Code Playgroud)
参考:https://developer.mozilla.org/en-US/docs/Web/API/Range/surroundContents