如何在textarea中转置两个字符

时间:2011-12-08 08:46:50

标签: javascript textbox google-chrome-extension

如何在Javascript中获取文本区域的内容并在光标周围交换两个字符?我想写一个小而有用的Chrome扩展程序,当我在gmail中输错时,我会这样做。 (我假设gmail中的主要编辑区域是textarea)。

这可能是一个非常愚蠢的问题。无论如何,我已经找到了答案并且失败了。我不是一个真正的程序员,但我已经用其他脚本语言写了一些代码片段。例如,使用autohotkey脚本就可以轻松地使用Firefox。出于某种原因,Javascript完全打败了我。

1 个答案:

答案 0 :(得分:0)

请参阅http://jsfiddle.net/Lg3Ng/

中的代码

<强> HTML:

<textarea id="my_text" onclick="changeChar();"></textarea>

<强> JAVASCRIPT:

function changeChar() {    
    var pos = getCaretPosition(document.getElementById("my_text"));
    //alert(pos);
    if (pos > 0) swapChars(pos - 1);
}

function swapChars(pos) {

    var cur_val = document.getElementById("my_text").value;

    var firstChar = cur_val.charAt(pos);
    var secondChar = cur_val.charAt(pos + 1);

    var startString = cur_val.substr(0, pos);
    var endString = cur_val.substring(pos + 2);

    document.getElementById("my_text").value = startString + secondChar + firstChar + endString;
}


// From http://demo.vishalon.net/getset.htm
function getCaretPosition(ctrl) {

    var CaretPos = 0;
    // IE Support
    if (document.selection) {

        ctrl.focus();
        var Sel = document.selection.createRange();

        Sel.moveStart('character', -ctrl.value.length);

        CaretPos = Sel.text.length;
    }
    // Firefox support
    else if (ctrl.selectionStart || ctrl.selectionStart == '0'){
        CaretPos = ctrl.selectionStart;
    }

    return (CaretPos);

}