简单的textarea字符串替换jquery脚本

时间:2013-11-26 15:35:59

标签: javascript jquery replace

我正在尝试制作一些简单的jquery脚本来替换textarea中的特定字符串。我知道了这个:

$("textarea").bind("keyup", function() {
    var text = $(this).val();
    text = text.replace(/,,/g, "′");
    $(this).val(text);
});

这会将,,替换为unicode符号。这是有效的,除了每次有替换时光标位置移动到textarea的最后一个字符。我希望游标在之后进行替换。我怎么能这样做?

这是我的jsfiddle:http://jsfiddle.net/zvhyh/

编辑:感谢帮助人员。我现在用这个: http://jsfiddle.net/zvhyh/14/

2 个答案:

答案 0 :(得分:1)

以下是您更新的小提琴: http://jsfiddle.net/zvhyh/10/

关键是使用selectionStart获取光标的当前位置,然后使用setSelectionRange将光标放在该位置。

// get current cursor position
var pos = $(this).val().slice(0, this.selectionStart).length;

// replace the text
$(this).val($(this).val().replace(/,,/g, "′"));

// reset the cursor position
this.setSelectionRange(pos, pos);

希望有所帮助。

更新

因为两个字符被一个字符替换,所以在上面的代码中,光标位置将跳过一个字符到右边。一种解决方法是首先检查是否存在“,,”组合,然后将该位置用作之前的一个字符。

更新了小提琴: http://jsfiddle.net/zvhyh/13/

if (text.indexOf(",,") > 0) { 
...
pos--;
..

答案 1 :(得分:1)

以下是我的看法:

http://jsfiddle.net/zvhyh/11/

$("textarea").bind("keyup", function() {
    var cursorPosition = $('textarea').prop("selectionStart");
    var text = $(this).val();
    if (text.indexOf(',,') > -1) {
        text = text.replace(/,,/g, "′");
        $(this).val(text);
        $('textarea').prop("selectionStart", cursorPosition - 1);
        $('textarea').prop("selectionEnd", cursorPosition - 1);
    }
});
相关问题