Javascript:在DOM操作后返回选择(突出显示的文本)

Javascript:在DOM操作后返回选择(突出显示的文本),javascript,jquery,html,dom,Javascript,Jquery,Html,Dom,此函数返回用户选择的文本,并将其包装在标记中,在本例中为粗体标记 function makeBold() { var selection = window.getSelection(); var range = selection.getRangeAt(0); var newNode = document.createElement("b"); range.surroundContents(newNode); } 现在,在调用函数之后,选择(突出显示的文本)被

此函数返回用户选择的文本,并将其包装在标记中,在本例中为粗体标记

function makeBold() {
    var selection = window.getSelection();
    var range = selection.getRangeAt(0);
    var newNode = document.createElement("b");
    range.surroundContents(newNode);
}



现在,在调用函数之后,选择(突出显示的文本)被删除。如何返回该选择,或者如何在不丢失选择的情况下调用函数

以下各项将起作用:

function makeBold() {
    var selection = window.getSelection();
    if (selection.rangeCount) {
        var range = selection.getRangeAt(0).cloneRange();
        var newNode = document.createElement("b");
        range.surroundContents(newNode);
        selection.removeAllRanges();
        selection.addRange(range);
    }
}
但是,有几个问题需要注意:

  • Range的
    surroundContents()
    方法不会对每个范围都有效:它必须在DOM中有意义,才能在新节点中包围范围内容。例如,在跨越两个段落的范围内使用
    surroundContents()
    ,但未完全选择其中任何一个段落,将抛出错误。有关此的正式定义,请参见
  • IE版本8之前(包括版本8)不支持DOM范围,并且具有与其他浏览器完全不同的
    选择
    对象。IE9将具有与其他浏览器类似的范围和选择功能
  • 在继续之前,您需要检查选择的
    rangeCount
    属性,否则如果没有选择,您将得到异常

适用于chrome/Firefox。你用的是哪种浏览器?@strustmaster:我没说它不工作,它工作了,但文本已不再被选中哇!谢谢你的功能和发言。这很有帮助。