Как переставить два символа в текстовой области - PullRequest
0 голосов
/ 08 декабря 2011

Как я могу получить содержимое текстовой области и поменять местами два символа вокруг курсора в Javascript? Я хочу написать крошечное, но полезное расширение для Chrome, которое позволит мне делать это, когда я набираю ошибки в gmail. (Я предполагаю, что основной областью редактирования в gmail является текстовая область).

Этот вопрос может быть слишком глупым, чтобы задавать его здесь. В любом случае я искал ответ и не смог. Я не настоящий программист, но я написал фрагменты, чтобы сделать это на других языках сценариев. Это достаточно просто сделать Firefox, например, с помощью скрипта autohotkey. По какой-то причине Javascript побеждает меня.

1 Ответ

0 голосов
/ 08 декабря 2011

См. Код в 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);

}
...