javascript - 当数据库中有\n 时,在浏览器中显示新行 <br>

标签 javascript html mongodb express ejs

在 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/

相关文章:

javascript - 使用 CrossRider 的 DatePicker 不工作?

javascript - 永无止境的滚动,两侧克隆元素

javascript - Bootstrap Typeahead.js

应用类时,css margin-left 不起作用

html - Angular/Breeze - 无法在 HTML 文本输入中输入小数点

html - 液体标记对输出进行排序

MongoDB:插入重复键更新

javascript - HTML5 &lt;script&gt; 声明

mongodb - 如何在 mongoDB 中切换数组中的元素

mongodb - 在 $group 中按小时分组(聚合)