這裏是一個跨瀏覽器的功能,我有我的標準庫:
function getCursorPos(input) {
if ("selectionStart" in input && document.activeElement == input) {
return {
start: input.selectionStart,
end: input.selectionEnd
};
}
else if (input.createTextRange) {
var sel = document.selection.createRange();
if (sel.parentElement() === input) {
var rng = input.createTextRange();
rng.moveToBookmark(sel.getBookmark());
for (var len = 0;
rng.compareEndPoints("EndToStart", rng) > 0;
rng.moveEnd("character", -1)) {
len++;
}
rng.setEndPoint("StartToStart", input.createTextRange());
for (var pos = { start: 0, end: len };
rng.compareEndPoints("EndToStart", rng) > 0;
rng.moveEnd("character", -1)) {
pos.start++;
pos.end++;
}
return pos;
}
}
return -1;
}
用它在你的代碼是這樣的:
var cursorPosition = getCursorPos($('#myTextarea')[0])
下面是它的互補功能:
function setCursorPos(input, start, end) {
if (arguments.length < 3) end = start;
if ("selectionStart" in input) {
setTimeout(function() {
input.selectionStart = start;
input.selectionEnd = end;
}, 1);
}
else if (input.createTextRange) {
var rng = input.createTextRange();
rng.moveStart("character", start);
rng.collapse();
rng.moveEnd("character", end - start);
rng.select();
}
}
http://jsfiddle.net/gilly3/6SUN8/
有你在這裏看到的解決方案:http://blog.vishalon.net/index .php/javascript-getting-and-setting-caret-position-in-textarea/ –
這會引發錯誤,因爲'indexOf'和lastIndexOf'函數不是val函數的方法。你應該使用它(儘管你根本不應該使用該代碼):'var firstNewline = String($(「#myTextarea」)。val())。indexOf('\ n');' – TricksfortheWeb