我可以在输入字段中获取光标的实际位置。我怎样才能全面了解这个立场。例如,我的输入文本如下:Hello World
,光标位于第2位。我怎样才能获得Hello
?
答案 0 :(得分:2)
拿出一小块。我将字符串拆分到光标位置,从第一个子字符串和第二个子字符串中获取最后一个字符。
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 :(得分: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
传回该字。
答案 2 :(得分:1)
以下工作方法是在起始位置的左侧和右侧查找第一个空格字符,并在其间返回字符串。它会考虑由空格描绘的任何连续字符串,即使输入是字母数字也会起作用:
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);
}
答案 3 :(得分: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);
};