29

jQuery 中是否有任何方法可以在文本输入中获取当前光标位置,而无需执行丑陋的浏览器特定代码?

像:

<input id="myTextInput" type="text" value="some text" >

光标在“some text”的“x”之后,我能得到“8”吗?

4

4 回答 4

36

如果没有一些特定于浏览器的代码,你就无法做到这一点,因为它们实现的文本选择范围略有不同。但是,有一些插件可以将其抽象出来。对于您所追求的,有jQuery Caret (jCaret) 插件

为了让您的代码获得该位置,您可以执行以下操作:

$("#myTextInput").bind("keydown keypress mousemove", function() {
  alert("Current position: " + $(this).caret().start);
});

你可以在这里测试它

于 2010-11-03T10:40:35.727 回答
16

使用语法text_element.selectionStart,我们可以根据所选文本的第一个字符的索引来获取文本选择的起始位置,text_element.value如果我们想获得与选择中的最后一个字符相同的位置,我们必须使用text_element.selectionEnd.

按如下方式使用它:

<input type=text id=t1 value=abcd>
<button onclick="alert(document.getElementById('t1').selectionStart)">check position</button>

我给你fiddle_demo

于 2013-09-19T19:49:48.727 回答
15

关于 Jquery Caret 插件的警告。

它将与Masked Input 插件冲突(反之亦然)。幸运的是,Masked Input 插件包含自己的 caret() 函数,您可以使用与 Caret 插件非常相似的方法来满足您的基本需求 - $(element).caret().begin 或 .end

于 2011-10-02T12:36:02.017 回答
7

刚刚在浏览时遇到,可能会对您有所帮助javascript-getting-and-setting-caret-position-in-textarea。您也可以将它用于文本框。

于 2010-11-03T08:50:47.937 回答