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%。