如何在 textarea 上设置克拉位置时考虑 Windows 换行符 ( \r\n )?

Posted

技术标签:

【中文标题】如何在 textarea 上设置克拉位置时考虑 Windows 换行符 ( \\r\\n )?【英文标题】:How to account for Windows newline ( \r\n ) while setting carat position on textarea?如何在 textarea 上设置克拉位置时考虑 Windows 换行符 ( \r\n )? 【发布时间】:2013-01-10 04:47:55 【问题描述】:

我一直在编写一些代码,可以在您在文本区域中键入时修改克拉位置。对于大多数浏览器,换行符是“\n”,但在 IE 8 及以下版本中,换行符是“\r\n”,它的长度是正常换行符的两倍。在设置我的克拉位置时,我该如何解释这种差异?我找到了这个resource,但我不确定如何实施它来纠正我的问题。我认为这就像在将“\r\n”剥离为“\n”之后计算换行符的数量一样简单,然后将该数量乘以 2 并将其添加到我的克拉位置,但它不起作用。

小提琴:http://bit.ly/TAQxiV P>

第 67-116 行用于获取和设置克拉位置和 textarea 内容。

有问题的脚本:http://jakiestfu.github.com/Behave.js/

【问题讨论】:

做得好,IE中的输入(字符数)和输出(光标位置)都必须更大,所以不清楚为什么需要任何特殊处理。也许你可以澄清你的确切问题是什么? 无论如何,如果你从文本中去掉所有\r,你应该只添加他们的号码一次。 我尝试通过 get 方法从 editors 值中删除 \r,但它仍然无法正常工作。如果您在 IE8 中尝试使用 Fiddle,您会发现问题,克拉几乎从未插入到正确的空间中 小提琴太长了,在调试中没有多大用处,尤其是在没有 IE8 的情况下(我认为大多数人没有)。您应该找到确切返回错误结果的部分,并创建一个测试用例。 【参考方案1】:

最简单的解决方案可能是测试那些特定版本的 IE,并在这种情况下将一些变量修改为 2,其余时间修改为 1

您可以使用BrowserDetect 对象来执行此操作。

BrowserDetect.browser // the name of the browser
BrowserDetect.version // the version of the browser

【讨论】:

浏览器检测是一种不好的做法,您应该改用特征检测(只需匹配文本中的\r\n)。 虽然我同意浏览器检测在大多数应用程序中都不是最理想的,但当与某些版本的 Internet Explorer 相关时,功能检测可能会成为问题。只要有一个功能可以将 IE 8 及更低版本与 9、10 及更高版本区分开来,那么,当然,去争取它。

以上是关于如何在 textarea 上设置克拉位置时考虑 Windows 换行符 ( \r\n )?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 textarea 文本更改上保留光标位置?

通过 ngModel Binding 设置值时如何在 textarea 上触发更改事件

如何在 setText 之后滚动 JavaFX TextArea

如何在文本区域的末尾设置光标?

自动提交后如何将光标保持在 textarea 中的位置?

如何在textarea上设置文本?