我正在尝试制作一些简单的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/
答案 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)
以下是我的看法:
$("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);
}
});