>我今天花了很多时间与JavaScript的线路结尾作斗争,并最终取得了一些值得分享的结果 - 如果只是为了拯救其他开发人员从下降到同一调试的黑洞。
您可能知道,谦虚的线路断裂实际上具有三种形式,具体取决于操作系统正在进行破坏。在Unix机器上,单个Newline字符“ N”可以完成这项工作。在Mac上,使用了托架返回“ R”。 DOS和Windows都使用:“ RN”。如果您不知道要寻找什么,这是那些相对微妙的问题之一。>
>今天,我的任务是构建JavaScript功能的简单问题,以将单个新线转换为文本方面的新线。我的第一次尝试看起来像:var doubleenewlinesre = /([^n])n([^n]) /g; 功能doublenewlines(obj){ obj.value = obj.value.replace(doubleenewlinesre,“ $ 1nn $ 2”); } 双新线
上面的代码使用简单的正则表达式,该表达式找到了不是新线的所有实例,其次是newline,然后是其他不是新线的东西。然后,该模式的实例被相同的模式替换为中间的两个新线,而不是一个。
>在Windows,Linux和Mac上的Firefox中效果很好,因为Firefox将Newlines视为“ N”,无论其运行方式如何。它在IE上为Windows和IE打破了Macintosh,因为这些浏览器分别使用“ RN”和“ R”。
足够公平。解决此问题的通常解决方案是在运行转换之前将线路结尾归一化,通过将三个组合替换为您的首选项的单个结尾(在我的情况为“ n”)中。这是我第二次尝试该功能:
功能doublenewlines(obj){ obj.value = obj.value.replace(/(rn | r | n)/g,'n'); obj.value = text.replace(doubleenewlinesre,“ $ 1nn $ 2”); } 那也没有用。经过大量的刮擦,调试和用警报框进行调试和戳戳之后,我终于发现了Internet Explorer的无证且几乎令人讨厌的晦涩难懂的“功能”:当您将字符串分配给输入对象的值属性时,IE默默地将您的NICE'N'线路转换为平台端。 Microsoft的文档没有注意到这一点,但我已经确认这在Internet Explorer的Windows和Mac版本上都会发生。>
> bizzare,如果您分配给隐藏表单字段对象的值属性,则不会进行转换;仅当您分配到文本区域时,线路结尾才会更改。
以下代码,尽管函数似乎与刚刚列出的代码相同,但确实可以做我想要的代码:
>功能doublenewlines(obj){ var text = obj.value; text = text.replace(/(rn | r | n)/g,'n'); obj.value = text.replace(doubleenewlinesre,“ $ 1nn $ 2”); }
这样可以正常工作,因为标准化版本被分配给变量,而不是直接分配给TextArea对象的值属性 - 因此,IE的自动段线结束转换被延迟到脚本结束,并且没有使用我的第二个正则表达式发挥破坏。
> 功能doublenewlines(text){ text = text.replace(/(rn | r | n)/g,'n'); 返回text.replace(doubleenewlinesre,“ $ 1nn $ 2”); } 双新线
尽管它需要在OnClick处理程序中进行更多代码,但仅将字符串操作抽象抽象,但我将完全避免怪异的线结束转换问题。不过,至少我已经了解了另一个IE的小怪癖。
经常询问有关JavaScript中线结尾的问题(常见问题解答)
>
>如何在JavaScript中添加多个线路断裂?>
世界”将在“ Hello”和“ World”之间增加界限。
>
>在JavaScript评论中,线结尾在JavaScript中的作用是什么? JavaScript中的单行评论从“ //”开始,并在划线中断。同一行上的“ //”之后的所有内容都被视为评论,并被JavaScript解释器忽略。
>
>我可以使用行末端来格式化我的JavaScript代码?>
>行结尾如何影响JavaScript代码的执行?但是,它们还可以根据自动插入(ASI)来影响代码的执行。如果将线路结束错误地放置,则可能会由于半旋律的自动插入而导致意外结果。因此,正确理解和使用线路结尾很重要。以上是JavaScript中的线路结尾的详细内容。更多信息请关注PHP中文网其他相关文章!