jQuery将换行符转换为br(相当于nl2br)

gbh*_*all 106 javascript jquery line-breaks

我正在使用jQuery获取一些textarea内容并将其插入到li中.

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

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

Luc*_*ofi 160

演示: 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');
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你这完美.奇怪的是这不是jQuery的官方功能. (5认同)
  • 因为jQuery并不是要替换像replace这样的原生javascript函数,它专注于CSS选择器链接和轻松访问!也许在未来的版本;-) (4认同)

mck*_*k89 84

你可以简单地做:

textAreaContent=textAreaContent.replace(/\n/g,"<br>");
Run Code Online (Sandbox Code Playgroud)

  • 我已经更新了它,现在它使用正则表达式,所以如果你想把多个换行符当作一个单独的br来改变正则表达式:/ \n +/g (4认同)

jnl*_*jnl 29

把它放在你的代码中(最好是在一般的js函数库中):

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

用法:

var myString = "test\ntest2";

myString.nl2br();
Run Code Online (Sandbox Code Playgroud)

创建一个字符串原型函数允许你在任何字符串上使用它.


Bob*_*ein 25

本着改变渲染而不是更改内容的精神,以下CSS 使每个换行符的行为如下<br>:

white-space: pre;
white-space: pre-line;
Run Code Online (Sandbox Code Playgroud)

为什么有两个规则:pre-line只影响换行符(感谢线索,@ KevinPauli).IE6-7和其他旧版浏览器可以回归到更极端pre,它还包括nowrap并呈现多个空格.有关这些和其他设置(pre-wrap)的详细信息,请参阅mozillacss-tricks(感谢@Sablefoste).

虽然我通常不喜欢SO 猜测而不是回答问题,但在这种情况下,用<br>标记替换换行可能会增加注入攻击的漏洞,而未使用的用户输入也是如此.每当你发现自己要改变字面问题所暗示的.text()调用时,你就会穿过一条鲜红色的线.html().(感谢@AlexS突出这一点.)即使您当时排除了安全风险,未来的更改也可能会无意中引入它.相反,这个CSS允许您使用更安全的方式获得没有标记的硬换行符.text().

  • 根据具体情况,这是最简单的解决方案,并且真正最好地回答了问题。您还可以考虑任何其他 `white-space:` 选项,例如 `pre-wrap`。见 https://css-tricks.com/almanac/properties/w/whitespace/ (2认同)