插入符号在firefox和IE上的位置不同

different caret position on firefox and IE

本文关键字:位置 IE 符号 firefox 插入      更新时间:2023-09-26

要重新创建该问题,请访问http://jsfiddle.net/BsJ6V/并在开始正文标记后键入任何字符(例如,如果键入h字符,则为<body>h)。

一个警告框将显示插入符号的位置。当你在Firefox中运行它时,插入符号的位置是56,当你在IE中运行它时,它是60。请问出了什么事?

编辑::更新链接

区别在于IE将文本区域内的每个换行符计算为两个字符(CRLF或'r'n),而Firefox将其计算为单个LF ('n)字符。

如果有前导换行符,您的函数将无法在IE中获得正确的插入符号位置。要查看这一点,请在第一个jsFiddle示例的文本区域的开头放置插入符号,按几次return并尝试键入其中一个空行。要解决这个问题,您可以使用我之前在Stack Overflow上发布的函数,或者如果您喜欢jQuery插件,我已经创建了一个用于处理文本区域选择的函数:http://code.google.com/p/rangyinputs/

请注意,jQuery的val()方法规范化了浏览器之间换行的差异(在我看来,这是没有帮助的,因为发送到服务器的值没有规范化),因此换行总是'n。我的插件和你的函数都返回一个相对于textarea的原始值属性的插入符号位置,而不是jQuery的规范化值,所以如果你使用插入符号位置来操作值,你需要使用$textarea[0].value而不是$textarea.val()

你可以看到这里的区别:http://jsfiddle.net/MyR7J/2/