Javascript 通过书签编辑选择的文本

Javascript edit text in selection via Bookmarklet

我正在尝试制作一个简单的小书签(带有 javascript 小程序的书签),它将获取选定的文本,反转它,然后在屏幕上更改它。例如,如果用户选择了一些文本,比如单词 hello,然后激活了这个小书签,那么文本就会变成 olleh。到目前为止,我有以下内容:

javascript:
function getSelectedText() {
var text = "";
if (window.getSelection) {
    text = window.getSelection().toString();
} else if (document.selection && document.selection.type != "Control") {
    text = document.selection.createRange().text;
}
    return text;
}
var selectedText = getSelectedText();
var textArray = selectedText.split("");
var reverseArray = textArray.reverse();
var reverseText = reverseArray.join("");
alert(reverseText);

我从 here 得到了 getSelectedText() 函数。最后,小书签只是提醒颠倒的文本。你如何使它真正取代页面上的文本?提前感谢您提供的任何帮助。

您可以将此添加到最后:

var nodeValue = window.getSelection().baseNode.nodeValue;
window.getSelection().baseNode.nodeValue = nodeValue.replace(selectedText, reverseText);

编辑

使用选择偏移在正确的地方反转,str.replace只替换第一次出现的单词,对于常见的单词如"the".

可能是错误的
var selection = window.getSelection();
var start = selection.anchorOffset;
var end = selection.focusOffset;
var nodeValue = selection.baseNode.nodeValue;
var newValue = nodeValue.slice(0, start) + reverseText + nodeValue.slice(end);
window.getSelection().baseNode.nodeValue = newValue;