如何从一开始就以字符形式在textarea中获取插入符号列(不是像素)的位置? [英] How to get the caret column (not pixels) position in a textarea, in characters, from the start?
问题描述
如何使用JavaScript在< textarea>
中获得插入位置?
How do you get the caret position in a <textarea>
using JavaScript?
例如: 这是|一个文本
这应该返回 7
。
如何让它返回光标/选择周围的字符串?
How would you get it to return the strings surrounding the cursor / selection?
例如:'这是', '',''text'
。
如果单词is突出显示,那么它将返回'这个','是','文字'
。
If the word "is" is highlighted, then it would return 'This ', 'is', ' a text'
.
推荐答案
使用Firefox,Safari(和其他基于Gecko的浏览器)您可以轻松使用textarea.selectionStart,但对于不起作用的IE,您必须执行以下操作:
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;
}
(此处完整代码)
我还建议你查看jQuery FieldSelection 插件,它允许你这样做还有更多...
I also recommend you to check the jQuery FieldSelection Plugin, it allows you to do that and much more...
编辑我实际上重新实现了上述代码:
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;
}
查看示例这里。
这篇关于如何从一开始就以字符形式在textarea中获取插入符号列(不是像素)的位置?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!