>我今天花了很多時間與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中文網其他相關文章!