2013-03-24 50 views
5

电流的话,我如何通过当前光标处获得textarrea一个字?获取有关插入位置

我想这样的事情,但是这在返回插入位置高达字符只出现第一个字母。例如:

如果光标FO之间ö它返回fo和excpected不foo

|ö栏是不等于禁止FOO。 =>Fo预计Foo

Foo bar is equ equ | al to bar foo。 =>equ期望equal

这是我到目前为止已经完成:

function getCaretPosition(ctrl) { 
    var start, end; 
    if (ctrl.setSelectionRange) { 
     start = ctrl.selectionStart; 
     end = ctrl.selectionEnd; 
    } else if (document.selection && document.selection.createRange) { 
     var range = document.selection.createRange(); 
     start = 0 - range.duplicate().moveStart('character', -100000); 
     end = start + range.text.length; 
    } 
    return { 
     start: start, 
     end: end 
    } 
} 

$("textarea").keyup(function() { 
    var caret = getCaretPosition(this); 

    var result = /\S+$/.exec(this.value.slice(0, caret.end)); 
    var lastWord = result ? result[0] : null; 
    alert(lastWord); 
}); 

http://fiddle.jshell.net/gANLv/

回答

5

尝试在你的代码改变这一行这样的:

var result = /\S+$/.exec(this.value.slice(0, this.value.indexOf(' ',caret.end))); 
+0

不错!非常感谢... – yckart 2013-03-24 17:18:56

+1

这是真棒作品对我来说太。唯一的问题是,在文本最后一个字将削减的最后一个字符如果在文本的末尾没有空间......例如'这是圆顶text'将返回'tex'如果光标在最后。和'这是圆顶文本'将返回正常'text'。这可以解决吗? – 2016-10-01 16:56:30

+0

增加了一个版本,在处理textarea的最后一个字,并删除尾随标点符号http://stackoverflow.com/a/40338359/295783 – mplungjan 2016-10-31 08:16:22