我可以在输入字段中获取光标的实际位置。我怎么能在这个位置上得到整个字。例如,我的输入具有以下文本:Hello World
,并且光标位于位置2.我怎么能得到Hello
?如何使用JavaScript在输入字段中的光标下获取字符串
3
A
回答
2
拿出一小块。我在光标位置分割字符串,并从第一个子字符串和第二个字符串的第一个中获取最后一个字符。通过寻找在左边,在起始位置的右侧的第一个空格字符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);
};
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
。然后它使用两个递归匿名函数来推送字符串中的每个方法,直到它们碰到字符串的开始和结尾。从技术上讲,它们被称为“命名函数表达式”(see here),并允许您递归地调用函数,即使您不想保存函数对象以备后用。然后,在获得这两个索引后,getWord
再次使用substring
方法,将原始str
中的单词传回。
0
试试这个。它认为用空格划定字符的任意字符串,连续,并将努力,即使输入字母数字:
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);
}
1
下工作和之间返回字符串:
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)
这是一个很好的方法。最糟糕的情况是像'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA [']''这可能会杀死CPU的字符串。一个好主意是检查是否有空间。 – 2014-09-12 10:09:33