如何使用JavaScript获取输入框中光标下的字符串

4

我可以获取输入框光标的实际位置,但如何获取该位置上的整个单词?例如,我的输入框中有以下文本:Hello World,而光标位于第 2 个位置。如何获取 Hello

4个回答

3
想到了一个小技巧。我在光标位置将字符串分割,然后获取第一个子字符串的最后几个字符和第二个子字符串的第一个字符。
    var value = $(el).val()
    var split =  el.selectionStart
    var a = value.substring(0, split).match(/[A-Za-z]*$/)[0]
    var b = value.substring(split).match(/^[A-Za-z]*/)[0]
    console.log(a + b)

1
function getWord (str, curPos) {
    var startIndex = (function _this (pos) {
        if (!str.substring(pos, pos + 1).match(/[A-Za-z]/)) {
            return pos + 1;
        } else if (pos === 0) {
            return 0;
        } else {
            return _this(pos - 1);
        }
    })(curPos - 1);
    var endIndex = (function _this (pos) {
        if (!str.substring(pos, pos + 1).match(/[A-Za-z]/) || pos === str.length) {
            return pos;
        } else {
            return _this(pos + 1);
        }
    })(curPos + 1);

    return str.substring(startIndex, endIndex);
}

在这里查看工作示例:http://jsfiddle.net/paulbruno/8PR9H/

这里是发生的事情。 getWord 接受输入字符串 str 和光标的当前位置 curPos。然后,它使用两个递归匿名函数将字符串推进每个方向,直到它们达到字符串的开头和结尾。严格来说,它们被称为“命名函数表达式”(请参见此处),并允许您递归调用函数,即使您不想保存函数对象以供以后使用。然后,在获取这两个索引之后,getWord 再次使用 substring 方法,从原始的 str 中传回单词。


1

以下代码通过查找起始位置左右两侧的第一个空格字符,并返回它们之间的字符串。它会考虑由空格分隔的任何连续字符串,并且即使输入是字母数字混合也能正常工作:

http://jsfiddle.net/PNA5T/

function myGetWord(aString,aPos){
    Nstr = aString.length;
        var start = aPos;
        var end = aPos;
        while (start>0 && aString[start]!=" ")
            start--;
        while (end<Nstr && aString[end]!=" ")
            end++;
    return aString.substring(start,end);        
}

这是一个不错的方法。最坏的情况可能是像 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA[...] 这样的字符串,可能会导致 CPU 崩溃。一个好主意是检查是否有任何空格。 - Ismael Miguel

0
试试这个:http://jsfiddle.net/fYkEB/
var el=document.getElementById('el');
var run=document.getElementById('run');

function findWord(str,pos){
    var words=str.split(' ');
    var offset=0;
    var i;
    for(i=0;i<words.length;i++){
        offset+=words[i].length+1;
        if (offset>pos) break;

    }
    return words[i];
}

run.onclick=function(){
    run.value='Word at cursor: '+findWord(el.value,el.selectionStart);
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接