Nodejs中jade模板如何给文本输出换行符这种东西……

发布于 1周前 作者 htzhanglong 来自 nodejs/Nestjs

Nodejs中jade模板如何给文本输出换行符这种东西……

搜索了好久,没找到答案,有人说jade不支持。从控制台输出,数据库里存的有 换行符。

但是打倒页面里就没有,用 | ! #都不行。

目前是输出之前整体给替换成br。但是想想就很傻逼。。。有没有人遇到并解决这个问题的?

4 回复

Node.js 中 Jade 模板如何给文本输出换行符

问题描述

在使用 Jade 模板引擎时,你可能会遇到这样的问题:文本中的换行符在渲染到页面上后没有生效。尽管你在控制台或数据库中看到文本包含换行符,但在浏览器中显示为单行文本。

解决方案

Jade 模板引擎确实有一些特定的语法来处理这种情况。你可以使用 | 来表示文本行,并通过适当的语法确保换行符被正确解析。以下是一些方法:

  1. 使用 | 和缩进: 在 Jade 中,你可以使用 | 符号来表示文本行,并且通过适当的缩进来实现换行效果。

    p
      | 这是一行文本。
      | 这是另一行文本。
  2. 使用 != 输出 HTML 特殊字符: 如果你需要输出包含 HTML 特殊字符(如 <br>)的内容,可以使用 != 来输出原始字符串。这将保留原始的 HTML 结构。

    p!= 文本\n包含换行符
  3. 预处理字符串: 你也可以在输出之前将文本中的换行符替换为 HTML 的 <br> 标签。虽然这种方法可能不如前两种优雅,但有时也是必要的。

    const jade = require('jade');
    const textWithNewlines = '这是第一行。\n这是第二行。';
    const html = jade.render(`p ${textWithNewlines.replace(/\n/g, '<br>')}`);
    console.log(html);

示例代码

假设我们有一个简单的 Jade 模板文件 template.jade

doctype html
html
  body
    h1 文本换行示例
    p
      | 这是一行文本。
      | 这是另一行文本。

如果你需要动态生成包含换行符的文本,可以在 JavaScript 文件中进行预处理:

const jade = require('jade');
const fs = require('fs');

// 动态生成包含换行符的文本
const textWithNewlines = '这是第一行。\n这是第二行。';

// 渲染 Jade 模板
const html = jade.render(fs.readFileSync('template.jade', 'utf8'), {
  text: textWithNewlines.replace(/\n/g, '<br>')
});

console.log(html);

通过这些方法,你可以更有效地在 Node.js 和 Jade 模板中处理文本换行符。希望这些解决方案对你有所帮助!


问题解决了。我想错了。不用回复了。。删除不了帖子。。

jade太麻烦了,第一次用就甩了。

在Node.js中使用Jade模板引擎(现在称为Pug)时,处理文本中的换行符可以通过一些简单的方法来实现。如果你的数据中包含换行符,并且希望在渲染到HTML页面时保留这些换行符,可以利用CSS样式或直接在模板中进行替换。

方法一:使用CSS white-space: pre;

你可以通过CSS设置元素的white-space属性为pre,这样就可以保持文本中的原始空格和换行符。

示例代码

index.pug

style.
  .preserve-newline {
    white-space: pre;
  }
div(class='preserve-newline')
  | 这是一段
  | 包含换行符
  | 的文本

方法二:在后端替换换行符为HTML <br>标签

你也可以在将数据传递给Jade模板之前,在服务器端将换行符替换为HTML的<br>标签。

示例代码

server.js

const express = require('express');
const app = express();

app.set('view engine', 'pug');

app.get('/', (req, res) => {
  const textWithNewlines = "这是一段\n包含换行符\n的文本";
  // 在服务器端替换换行符为<br>
  const htmlText = textWithNewlines.replace(/\n/g, '<br>');
  res.render('index', { content: htmlText });
});

app.listen(3000, () => console.log('App listening on port 3000!'));

index.pug

div!= content

以上两种方法都可以实现保留文本中的换行符。选择哪种方法取决于你的具体需求和偏好。第一种方法更符合语义化标准,而第二种方法则是在HTML中直接插入换行标签。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!