在HTMLinput中获取插入位置?

如何在input中获得文本插入符的索引?

– > selectionStart

<!doctype html> <html> <head> <meta charset = "utf-8"> <script type = "text/javascript"> window.addEventListener ("load", function () { var input = document.getElementsByTagName ("input"); input[0].addEventListener ("keydown", function () { alert ("Caret position: " + this.selectionStart); // You can also set the caret: this.selectionStart = 2; }); }); </script> <title>Test</title> </head> <body> <input type = "text"> </body> </html> 

以下将以字符索引的forms为您提供select的开始和结束。 它适用于文本input和textareas,并且由于IE的奇怪处理换行符而稍微复杂。

 function getInputSelection(el) { var start = 0, end = 0, normalizedValue, range, textInputRange, len, endRange; if (typeof el.selectionStart == "number" && typeof el.selectionEnd == "number") { start = el.selectionStart; end = el.selectionEnd; } else { range = document.selection.createRange(); if (range && range.parentElement() == el) { len = el.value.length; normalizedValue = el.value.replace(/\r\n/g, "\n"); // Create a working TextRange that lives only in the input textInputRange = el.createTextRange(); textInputRange.moveToBookmark(range.getBookmark()); // Check if the start and end of the selection are at the very end // of the input, since moveStart/moveEnd doesn't return what we want // in those cases endRange = el.createTextRange(); endRange.collapse(false); if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) { start = end = len; } else { start = -textInputRange.moveStart("character", -len); start += normalizedValue.slice(0, start).split("\n").length - 1; if (textInputRange.compareEndPoints("EndToEnd", endRange) > -1) { end = len; } else { end = -textInputRange.moveEnd("character", -len); end += normalizedValue.slice(0, end).split("\n").length - 1; } } } } return { start: start, end: end }; } var textBox = document.getElementById("textBoxId"); textBox.focus(); alert( getInputSelection(textBox).start ); 

现在有一个很好的jQuery插件: Caret插件

然后你可以调用$("#myTextBox").caret();

我们曾经使用过这样一个旧的JavaScript应用程序,但我还没有testing过几年:

 function getCaretPos(input) { // Internet Explorer Caret Position (TextArea) if (document.selection && document.selection.createRange) { var range = document.selection.createRange(); var bookmark = range.getBookmark(); var caret_pos = bookmark.charCodeAt(2) - 2; } else { // Firefox Caret Position (TextArea) if (input.setSelectionRange) var caret_pos = input.selectionStart; } return caret_pos; }