jQuery:在没有浏览器特定代码的情况下获取输入中文本的光标位置? [复制]

Posted

技术标签:

【中文标题】jQuery:在没有浏览器特定代码的情况下获取输入中文本的光标位置? [复制]【英文标题】:jQuery: Get the cursor position of text in input without browser specific code? [duplicate] 【发布时间】:2011-05-04 08:58:19 【问题描述】:

在 jQuery 中有什么方法可以在文本输入中获取当前光标位置,而无需编写丑陋的浏览器特定代码?

喜欢:

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

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

【问题讨论】:

相关:***.com/questions/2897155/… 抱歉,输入框一开始没有显示。这应该说明我想要什么。 【参考方案1】:

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

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

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

You can test it here.

【讨论】:

此 Jquery Caret 链接 plugins.jquery.com/project/jCaret 已关闭。 Google Code http://code.google.com/p/jcaretjCaret 项目的链接 @nickcraver 无法处理我的代码。我是否需要添加另一个来源,例如 是的,你需要 jQuery。 我相信现在的链接是:bitbucket.org/accursoft/caret/src【参考方案2】:

使用语法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

【讨论】:

你为什么要费心把 el.value 放到 var val 中?将这样一个明确的术语缩写为只使用一次似乎只会混淆其他不错的代码(我还没有运行它:) @LeeGee true,因此减少了代码。 很好的解决方案!它在 IE8 中不起作用,但谁在乎呢!【参考方案3】:

关于 Jquery Caret 插件的警告。

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

【讨论】:

此外,jsfiddle 数字在可能按下向下/向上键的情况下看起来不正确。光标摆动到文本框的末尾,但该值不代表这种移动到输入的开头/结尾。【参考方案4】:

浏览时偶然发现,希望对您有所帮助javascript-getting-and-setting-caret-position-in-textarea。您也可以将它用于文本框。

【讨论】:

很遗憾,该网站已无法访问。你还记得具体的实现吗?

以上是关于jQuery:在没有浏览器特定代码的情况下获取输入中文本的光标位置? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

jquery 想要获取 DOM 中的下一个输入元素

如何使用 ajax Post 方法在没有 jQuery 的情况下提交用户输入

如何在不使用jQuery的情况下获取元素的offset()。top值?

如何在没有 \n 的情况下从 txt 中获取特定行(Python)

选择特定行和列中的特定输入元素

如何在没有 jQuery 的情况下在 JavaScript 中打开 JSON 文件?