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