此函数返回用户选择的文本并将其包装在标记中,在本例中为粗体标记。
function makeBold() {
var selection = window.getSelection();
var range = selection.getRangeAt(0);
var newNode = document.createElement("b");
range.surroundContents(newNode);
}
现在,在我调用该函数后,将删除选择(突出显示的文本)。如何返回该选择,或者如何在不丢失我的选择的情况下调用该函数?
答案 0 :(得分:6)
以下内容可行:
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);
}
}
但是,有几个问题需要注意:
surroundContents()
方法不适用于每个范围:它必须在DOM内有意义,以包围新节点中的范围内容。例如,在范围内使用surroundContents()
跨越两个段落但未完全选择任何一个将引发错误。有关此的正式定义,请参阅DOM Level 2 Range spec。Selection
对象。 IE 9将具有与其他浏览器类似的范围和选择功能。rangeCount
属性,否则如果没有选择,您将获得异常。