【问题标题】:How do I check if the user's text cursor is between two strings?如何检查用户的文本光标是否在两个字符串之间?
【发布时间】:2014-06-24 21:29:16
【问题描述】:

我想检查一下用户的(闪烁的)光标位置是否在文本区域中的两个字符串之间。

处理标签事件是自己的事,我只想知道处理与标签相关的光标位置的方法。

【问题讨论】:

  • 光标与鼠标光标一样??还是闪烁的光标?
  • 你将不得不按照这些思路实现一些东西来获得你想要的东西。 jsfiddle.net/techfoobar/xEVSu
  • @KyleK 请不要告诉我你现在才能够写出这一切..
  • 哈哈....不。只是真的想不出办法....除了用 div 伪造插入符。虽然这篇文章看起来可能会让你走上正确的道路……stackoverflow.com/questions/1064089/…。因为你在这里有一个多步骤的问题。首先,您必须弄清楚如何找出插入符号的位置。那篇文章可能对您有所帮助。然后你必须弄清楚如何计算 标签之间的位置。然后计算一下插入符号是在里面还是在外面。
  • ta.value.split("")[0].lastIndexOf("") <ta.selectionstart></ta.selectionstart>

标签: javascript jquery regex textarea


【解决方案1】:

要找到标签内匹配,您可以将文本分成左右两部分,然后在正确的一半中查找正确的打开/关闭标签。 从那里开始,使用相同的一半替换选项卡很简单:

<textarea>blah <code> this is the code </code> and this is not.</textarea>
<script>

function handleKeys(e) {
     var t,n,s,r, pad="    ";

    if (e.shiftKey && e.keyCode == 32) {
            t = this.value,
        n = this.selectionStart,
        s = this.scrollTop,
        r = [t.slice(0, n), t.slice(n)];

        this.value = r.join(pad);
        this.selectionStart = this.selectionEnd = n + pad.length;
        this.scrollTop = s;

        e.preventDefault();
    }
}  



</script>

在代码标签内按制表符将插入制表符。您还应该考虑为只使用键盘来逃避制表符陷阱的人提供一些方法,也许是转义键或其他东西。

编辑:我添加了滚动恢复以修复某些浏览器在插入时将文本区域滚动到顶部的错误。由于这是一个可能触发很多的事件,我还优化了该功能以完全忽略不相关的按键(而不是每次按键都做一些工作)。

【讨论】:

  • @jt0dd:盲人和行动不便的人主要使用键盘进行网络导航和交互。
  • 我将您的代码用于this feature request.
  • 如何检查用户光标之前(之后)的字符是空格还是换行符?当用户按住 Shift + 空格键时,我使用它插入 4 个空格,但一位用户指出,我应该通过确保缩进之前没有字母来避免在“XML is..”之后创建意外缩进。
  • ta.value.slice(ta.selectionStart-4, ta.selectionStart).trim()
  • 作为一项功能:如果您认真对待它,我们可以做得更好。特别是,它应该处理缩进选择,并管理长 textareas 的 scrollTop 属性,因为重新设置 .value 以插入选项卡可能会导致滚动。我在danml.com/textedit 使用 [tab] 有一个更好的实现,但如果有任何兴趣,我会提取功能并清理它...
猜你喜欢
  • 2017-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-11
  • 2014-09-01
  • 2022-06-19
  • 2018-02-27
相关资源
最近更新 更多