Nodejs 为什么EJS的include会有那么多的空白字符?
Nodejs 为什么EJS的include会有那么多的空白字符?
每次include部分的前面都会有一大段的空白字符,如图:
<a class=“content_img” href="/upload/4fc415584ce4c4101c0e4a7b/1345165647271_111.png"><img src="/upload/4fc415584ce4c4101c0e4a7b/1345165647271_111.png" alt=“enter image description here”></a>
代码为:
<% include common/user.html %>
我也同样的问题。求解救呀。谢谢。
Node.js 中 EJS 的 include
会出现额外空白字符的原因及解决方案
问题描述
当你使用 EJS 的 include
指令时,你可能会发现被包含的文件前面或后面出现了大量的空白字符(空格、换行等),这可能会导致 HTML 结构出现不必要的空白,影响页面布局。
原因分析
EJS 在处理 include
指令时,会将被包含文件的内容直接插入到当前文件中。如果被包含的文件(例如 common/user.html
)在其顶部或底部有额外的空白字符,这些字符也会被插入到最终的 HTML 文件中。
示例代码
假设你有以下结构:
index.ejs
<!DOCTYPE html>
<html>
<head>
<title>Example</title>
</head>
<body>
<% include common/user.html %>
</body>
</html>
common/user.html
<div class="user-info">
<h2>User Info</h2>
<p>Name: John Doe</p>
</div>
在这个例子中,user.html
文件没有额外的空白字符,所以 index.ejs
渲染出来的 HTML 是干净的。但是,如果 user.html
文件中有额外的空白字符,问题就会出现。
解决方案
要解决这个问题,你可以确保所有被包含的文件都没有多余的空白字符,或者在渲染模板之前进行清理。一种简单的方法是在被包含的文件中删除所有的空白字符。
例如,你可以手动编辑 common/user.html
文件,移除任何不必要的空白字符:
<div class="user-info"><h2>User Info</h2><p>Name: John Doe</p></div>
或者,如果你需要保留格式但希望在渲染时去除空白字符,可以在 Node.js 中使用自定义的过滤器来处理 EJS 渲染过程。例如:
index.ejs
<!DOCTYPE html>
<html>
<head>
<title>Example</title>
</head>
<body>
<% include common/user.html %>
</body>
</html>
common/user.html
<div class="user-info">
<h2>User Info</h2>
<p>Name: John Doe</p>
</div>
在 Node.js 中,你可以使用自定义的 EJS 配置来去除空白字符:
const ejs = require('ejs');
ejs.renderFile('index.ejs', {}, {
client: false,
compileDebug: false,
delimiter: '%',
rmWhitespace: true // 这个选项可以去除多余的空白字符
}, (err, str) => {
if (err) throw err;
console.log(str);
});
通过这种方式,你可以确保生成的 HTML 文件没有多余的空白字符,从而避免页面布局问题。
在使用 EJS 模板引擎时,如果你发现 include
部分前后出现了多余的空白字符,这通常是因为模板文件中包含了一些额外的空白字符或换行符。
示例代码
假设我们有两个文件:
index.ejs
<!DOCTYPE html>
<html>
<head>
<title>My Page</title>
</head>
<body>
<% include header.ejs %>
<div class="content">
<h1>Welcome to My Site</h1>
</div>
</body>
</html>
header.ejs
<header>
<nav>
<ul>
<li><a href="/">Home</a></li>
<li><a href="/about">About</a></li>
</ul>
</nav>
</header>
解释
在上面的例子中,header.ejs
文件中的空白字符(包括换行符)会在 include
之后被保留下来。这些额外的空白字符可能会导致 HTML 输出中出现不期望的空白字符。
解决方案
为了去除多余的空白字符,可以在 header.ejs
文件中删除不必要的空白字符或使用 EJS 的过滤器来处理输出。
方法一:删除不必要的空白字符
确保 header.ejs
文件中没有多余的空白字符或换行符:
<header><nav><ul><li><a href="/">Home</a></li><li><a href="/about">About</a></li></ul></nav></header>
方法二:使用 EJS 过滤器
你也可以使用 EJS 的过滤器来去除空白字符:
<header><%- include('header.ejs') %></header>
其中 <%-
表示输出时不进行转义,并且可以去除多余的空白字符。
通过以上方法,你可以有效地解决 include
后面出现多余空白字符的问题。