前端开发中,<textarea> 在保存时格式是可以保存到数据库的,但是展示时因为 \n 和 \s 不能互转,导致页面不能按照刚开始的格式展示。我们可以采取以下方式解决:
方法一:
保存的时候按照原格式保存,展示的时候在需要展示内容的 div 外层嵌套 <pre> 标签。
<pre>
<div>{{ textareaContent }}</div>
</pre>
<pre> 标签可定义预格式化的文本。被包围在 pre 元素中的文本通常会保留空格和换行符。而文本也会呈现为等宽字体。
<pre> 标签的一个常见应用就是用来表示计算机的源代码。对于技术博客经常会用到pre标签输出代码或是代码高亮,而默认情况下,pre 标签中的内容若超出范围不会自动换行。
下面介绍一个方法让 <pre > 标签中的内容自动换行并符合 W3C 标准(多浏览器支持):
pre {
white-space:pre-wrap; /* css3.0 */
white-space:-moz-pre-wrap; /* Firefox */
white-space:-pre-wrap; /* Opera 4-6 */
white-space:-o-pre-wrap; /* Opera 7 */
word-wrap:break-word; /* Internet Explorer 5.5+ */
}
方法二:
提交数据之前,将 textarea 的回车、空格先转换格式,再提交数据存入数据库,那样取出数据输出到 web 端也能保证格式一致。
//关键js代码
var text = $("textarea").text();
var des = text.replace(/\r\n/g, '<br/>').replace(/\n/g, '<br/>').replace(/\s/g, ' '); //转换格式
//将des文本内容存入数据库
//取出渲染视图即可
方法三:
数据库存储的是原生的 textarea 文本,这时候,输出到前端前需要解析文本。
前提:textarea 文本上传到后台时已经包含了换行回车符,如果你发现 textarea 上传时没有保存换行回车,可以尝试设置 textarea 标签属性 wrap="hard" (html5支持)。
function init() {
var text = $("div.text").text(); //先取出未转换格式前端数据
var des = text.replace(/\r\n/g, '<br/>').replace(/\n/g, '<br/>').replace(/\s/g, ' '); //转换格式
$("div.text").empty();
$("div.text").append(des);
}