jQuery转换换行符(相当于nl2br)

我有jQuery采取一些textarea内容,并将其插入李。

我希望它在视觉上保留换行符。

必须有一个非常简单的方法来做到这一点…

演示: http : //so.devilmaycode.it/jquery-convert-line-breaks-to-br-nl2br-equivalent

function nl2br (str, is_xhtml) { var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br />' : '<br>'; return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1'+ breakTag +'$2'); } 

你可以简单地做:

 textAreaContent=textAreaContent.replace(/\n/g,"<br>"); 

把它放在你的代码中(最好在一个通用的js函数库中):

 String.prototype.nl2br = function() { return this.replace(/\n/g, "<br />"); } 

用法:

 var myString = "test\ntest2"; myString.nl2br(); 

创build一个string原型函数允许你在任何string上使用这个。

本着改变渲染而不是改变内容的精神,下面的CSS 使得每一个新行都像一个行为

 white-space: pre; white-space: pre-line; 

为什么两条规则: pre-line只影响换行(谢谢你的线索@KevinPauli)。 IE6-7和其他老的浏览器回落到更多的极端,其中还包括nowrap和呈现多个空间。 有关这些和其他设置( pre-wrap )在mozilla和css-tricks (谢谢@Sablefoste)的详细信息。

虽然我通常反对SO倾向于猜测问题而不是回答问题,但在这种情况下,使用<br>标记replace换行符可能会增加对未注入用户input的注入攻击的脆弱性。 当你发现自己改变.text()调用.html()这个字面意义上的问题意味着必须完成的时候,你会穿越明亮的红线。 (感谢@AlexS突出显示了这一点。)即使您当时排除了安全风险,未来的更改也可能在不知情的情况下引入。 相反,这个CSS允许你使用更安全的.text()而不使用标记来获得强硬的换行符。

使用这个代码

 jQuery.nl2br = function(varTest){ return varTest.replace(/(\r\n|\n\r|\r|\n)/g, "<br>"); }; 

提高@Luca Filosofi的接受答案,

如果需要的话,将这个正则expression式的开始子句改为/([^>[\s]?\r\n]?)也会增加新行在标签和一些空格之后的情况,而不仅仅是一个标签紧接着换行

从DOM中的textarea插入文本并保持换行的另一种方法是使用Node.innerText属性来表示节点及其后代的呈现文本内容。

作为一个吸气剂,它接近用户将得到的文本,如果他们用光标突出元素的内容,然后复制到剪贴板。

该酒店在2016年成为标准,并得到现代浏览器的大力支持。 我可以使用 :当我发布这个答案时,覆盖全球97%。