在textarea中的插入符位置,从字符开始 [英] Caret position in textarea, in characters from the start
问题描述
如何使用JavaScript在文本区域中获得插入符位置?
例如:
一个文本
这应该返回7。
返回光标/选择周围的字符串?例如:
'这是','','一个文本'
单词is被突出显示,则它将返回'This','is','a text'
对于Firefox,Safari(和其他基于Gecko的浏览器),你可以很容易地使用textarea.selectionStart,但对于IE不起作用,所以你必须这样做:
function getCaret(node){
if(node.selectionStart){
return node.selectionStart;
} else if(!document.selection){
return 0;
}
var c =\001,
sel = document.selection.createRange(),
dul = sel.duplicate(),
len = 0;
dul.moveToElementText(node);
sel.text = c;
len = dul.text.indexOf(c);
sel.moveStart('character', - 1);
sel.text =;
return len;
}
(完整代码)
我还建议您检查jQuery FieldSelection 插件,它允许
编辑:我实际上重新实现了上面的代码:$ b b
function getCaret(el){
if(el.selectionStart){
return el.selectionStart;
} else if(document.selection){
el.focus();
var r = document.selection.createRange();
if(r == null){
return 0;
}
var re = el.createTextRange(),
rc = re.duplicate();
re.moveToBookmark(r.getBookmark());
rc.setEndPoint('EndToStart',re);
return rc.text.length;
}
return 0;
}
查看示例此处。
How do you get the caret position in text area using JavaScript?
For example:
This is| a text
This should return 7.
How would you get it to return the strings surrounding the cursor/selection? eg:
'This is', '', ' a text'
If the word "is" is highlighted, then it would return 'This ', 'is', ' a text'
With Firefox, Safari (and other Gecko based browsers) you can easily use textarea.selectionStart, but for IE that doesn't work, so you will have to do something like this:
function getCaret(node) {
if (node.selectionStart) {
return node.selectionStart;
} else if (!document.selection) {
return 0;
}
var c = "\001",
sel = document.selection.createRange(),
dul = sel.duplicate(),
len = 0;
dul.moveToElementText(node);
sel.text = c;
len = dul.text.indexOf(c);
sel.moveStart('character',-1);
sel.text = "";
return len;
}
I also recommend you to check the jQuery FieldSelection Plugin, it allows you to do that and much more...
Edit: I actually re-implemented the above code:
function getCaret(el) {
if (el.selectionStart) {
return el.selectionStart;
} else if (document.selection) {
el.focus();
var r = document.selection.createRange();
if (r == null) {
return 0;
}
var re = el.createTextRange(),
rc = re.duplicate();
re.moveToBookmark(r.getBookmark());
rc.setEndPoint('EndToStart', re);
return rc.text.length;
}
return 0;
}
Check an example here.
这篇关于在textarea中的插入符位置,从字符开始的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!