如何用另一个文本替换页面上的选定文本?

时间:2014-01-30 15:07:13

标签: javascript google-chrome-extension

我正在尝试使用上下文菜单中调用的函数 switchText 将所选文本替换为另一个文本。

function switchText(info) {

var text = info.selectionText;     // selected text

// then I do some manipulations with 'text' and get 'text_to_replace'

var text_to_replace = "some text"; // text to replace

}

提醒(文字)提醒(text_to_replace)工作正常,但我正在尝试替换页面上的所选文字,但我无法弄清楚如何去做吧。我尝试了不同的方法,但他们没有工作。需要什么特殊权限?如果这是一个愚蠢的问题,我很抱歉,我是JS的初学者。

2 个答案:

答案 0 :(得分:1)

如果您希望能够在页面的任何位置执行此操作,则需要能够为您的选择设置某种识别ID。您必须通过某种内容脚本执行此操作。您可以在Chrome Developer documentation中详细了解相关信息。

此代码允许您更改单个选择的文本

(仅在Chrome中测试)

function switchText(id) {
    // Gets the selection range
    // This is from Tim Down, linked below
    var range, sel = window.getSelection();
    if (sel.rangeCount && sel.getRangeAt) {
        range = sel.getRangeAt(0);
    }
    // Creates a new node range
    document.designMode = "on";
    if (range) {
        sel.removeAllRanges();
        sel.addRange(range);
    }
    // This is from user YeppThatsMe, also linked below
    document.execCommand("insertHTML", false, "<span id='own-id'>"+ document.getSelection()+"</span>");

    document.designMode = "off";

    // You can use either a variable or a string
    var someNewText = "-- You can make this whatever you want --";

    // Finds the new span and replaces the selection with your new text
    document.getElementById("own-id").innerHTML=someNewText;
};

源脚本

Tim's script

HTML5 inserCommand

最后一点

我没有花太多时间进行测试,而且脚本按原样只会更改每页一个选项。您需要调整函数获取标记和属性信息的方式(将其更改为getElementsByClassName?)以多次运行它,但这应该有效。

答案 1 :(得分:0)

更新由Id

定位的html元素
document.getElementById("idtotarget").innerHTML = switchText(document.getElementById("idtotarget").innerHTML)