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

jac*_*ank 1 html javascript ejs mongodb express

在 mongo 中,我有一个带有类似reviewText: 'this is line 1\nthis is line 2',. 我从 a 那里得到了这个textarea\n因为用户按下了 Enter 键。我想在屏幕上打印带有换行符的div中的文本(如果他点击了很多输入,最好只有一个换行符)我不知道该怎么做,因为我没有在屏幕上看到任何\ns

<div class = "displayReview"><%= e.reviewText %></div>在 EJS 中做的只是将其全部打印在 oneline 上。它让我<div class="displayReview">this is line 1 this is line 2</div>进入浏览器。

我的路线中有一个地方可以更新文档,例如:

    .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 />')
        })
Run Code Online (Sandbox Code Playgroud)

我尝试做评论中的事情。但显然只是将<br />(文本)放入字符串中,而不是 HTML 中。我希望有一种简单的方法可以做到这一点。

我希望在将其打印到屏幕上时看到换行符,用户在textarea发送表单之前按 Enter 键。如果用户连续多次点击回车按钮,则应该只有一个换行符。

S M*_*han 5

首先,标准化换行符并将其减少到只有一个(根据您的要求):

e.reviewText = e.reviewText.replace(/\r?\n/g, '\n');
e.reviewText = e.reviewText.replace(/\n+/g, '\n');
Run Code Online (Sandbox Code Playgroud)

这会将您的数据置于标准形式。以特定方式显示该数据是模板的工作。我没有使用过 EJS,但是看看他们的示例代码,看起来这些代码应该可以工作:

<div class = "displayReview">
  <% e.reviewText.split('\n').forEach(function(ln) {%>
     <%= ln %><br>
  <% } %>
</div>
Run Code Online (Sandbox Code Playgroud)

在这种特殊情况下,也许在模板渲染数据之后,数据本身就被丢弃了,所以特别注意将数据操作与表示分离只是一种形式,但这仍然是一个好习惯,并且使代码更容易稍后修改。