【发布时间】:2012-12-20 15:57:29
【问题描述】:
我正在制作一个简单的网络应用程序,让用户选择文本并以黄色(或任何颜色,无关紧要)突出显示它。这是我目前所拥有的:
function replaceSelectedText() {
var sel, range;
var replacementText, spanTag;
if (window.getSelection) {
replacementText = window.getSelection().toString();
spanTag = document.createElement("span");
spanTag.className = "highlighted";
spanTag.appendChild(replacementText);
sel = window.getSelection();
if (sel.rangeCount) {
range = sel.getRangeAt(0);
range.deleteContents();
//range.insertNode(document.createTextNode(replacementText));
range.insertNode(spanTag);
}
} else if (document.selection && document.selection.createRange) {
replacementText = '<span class="highlighted">' + document.selection.createRange().text + '</span>';
range = document.selection.createRange();
range.text = replacementText;
}
}
document.onmouseup = replaceSelectedText;
document.onkeyup = replaceSelectedText;
我让它在突出显示所选短语的地方工作,但我只是在正文的 HTML 上使用 replace() 调用,所以如果用户选择了像“a”这样的常用词,“a”的第一次出现会被突出显示,而不是他们点击的那个。
到目前为止,我的代码是否正确,还是应该继续使用 replace() 调用?替换似乎可以工作,但我似乎无法获得所选单词出现位置的数组索引,并且范围似乎没有返回非常有用的值。
提前致谢。
【问题讨论】:
-
您使用的浏览器是什么?以下链接讨论了选择突出显示,它适用于 Firefox 和 Safari:stackoverflow.com/questions/2990566/…
-
更新:抱歉,现在我意识到您必须单击箭头下方的复选标记按钮才能接受答案。我已经返回并接受了对我问题的所有好的回答,抱歉我不知道如何早点做到这一点!
-
如果要突出显示选定的文本,可以使用
document.execCommand()执行此操作。见stackoverflow.com/questions/2582831/…
标签: javascript jquery range getselection