在 mongo 中,我有一个包含类似 reviewText: 'this is line 1\nthis is line 2',
字段的文档。我从 textarea
那里得到的所以\n
是因为用户按了 Enter 键。我想在屏幕上打印带有换行符的 div 中的文本(如果他多次输入,最好只有一个换行符)我不知道该怎么做,因为我没有在屏幕上看到任何 \n
我愿意<div class = "displayReview"><%= e.reviewText %></div>
在 EJS 中,它只是将所有内容打印在 oneline 上。它让我<div class="displayReview">this is line 1 this is line 2</div>
在浏览器中。
我的 route 有一些地方可以更新文档,例如:
.then(function(returnedReviews){
console.log(" returnedReview ",returnedReviews);
returnedReviews.forEach(function(e){
e.momented = moment(e.createdAt.getTime()).fromNow()
// e.reviewText = e.reviewText.replace(/\r?\n/g, '<br />')
})
我尝试按照评论中的内容去做。但这显然只是把 <br />
(文本)在字符串中而不是 HTML 中。我希望有一种简单的方法可以做到这一点。
当用户在 textarea
中按回车键将其打印到屏幕时,我希望看到换行符在他发送表格之前。如果用户连续多次点击回车按钮,则应该只有一个换行符。
最佳答案
首先,标准化换行符并将其减少到只有一个(符合您的要求):
e.reviewText = e.reviewText.replace(/\r?\n/g, '\n');
e.reviewText = e.reviewText.replace(/\n+/g, '\n');
这会将您的数据置于标准形式中。以特定方式显示该数据是模板的工作。我没有使用过 EJS,但是看看他们的示例代码,看起来这些代码应该可以工作:
<div class = "displayReview">
<% e.reviewText.split('\n').forEach(function(ln) {%>
<%= ln %><br>
<% } %>
</div>
在这种特殊情况下,也许在模板渲染数据之后,数据本身就被丢弃了,所以特别注意将数据操作与表示分离是一种形式,但这仍然是一个好习惯,并且使代码更容易稍后修改.
关于javascript - 当数据库中有\n 时,在浏览器中显示新行 <br>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38680104/