如何获得 <textarea>
中的插入符号位置使用 JavaScript?
例如:This is| a text
这应该返回 7
.
如何让它返回围绕光标/选择的字符串?
例如:'This is', '', ' a text'
.
如果单词“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插件,它可以让你做到这一点以及更多......
编辑:我实际上重新实现了上面的代码:
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;
}
查看示例here .
关于javascript - 如何从一开始就以字符形式获取文本区域中的插入符号列(不是像素)位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/263743/