【问题标题】:whitespaces when adding partial template using EJS使用 EJS 添加部分模板时的空格
【发布时间】:2014-06-30 11:17:41
【问题描述】:

我正在使用带有 EJS 引擎的 SailsJS。

当我在布局文件中使用 添加部分时,我在编译的 HTML 代码 (template.ejs) 之前得到了空格。

请注意,当我将 template.ejs 内容复制粘贴到布局中(不使用包含/部分)时,空格消失了。

见下图:

第一部分: 代码。

第二部分: chrome DOM。

第三部分:空白元素检查(DOM 属性)

【问题讨论】:

  • 我也发现了这个,这是因为模板引擎中使用了解析器(带有正则表达式),所以你无法解决这个问题,我自己制作了自己的ejs模板引擎simpleT(github.com/micnic/simpleT ) 使用更复杂的解析器,它仍然非常原始并且可能存在一些错误,如果您想使用它并发现一些困难,请告诉我。

标签: node.js dom express sails.js ejs


【解决方案1】:

我也遇到过同样的问题。 我做的很简单。

转到 ejs 模块 index.js 文件。 求偏函数。 找到这部分代码:

var source = options.cache
? cache[key] || (cache[key] = fs.readFileSync(file, 'utf8'))
: fs.readFileSync(file, 'utf8'); 

替换成

var source = options.cache
? cache[key] || (cache[key] = fs.readFileSync(file, 'utf8').trim())
: fs.readFileSync(file, 'utf8').trim();

所以,我所做的只是使用了 trim() java 脚本函数。

希望对您有所帮助。

【讨论】:

  • 我试过这个,它不起作用,我什至不确定sails 如何渲染部分,它调用哪个库。也许它调用 local-ejs ?我试图在那里修改此代码,但仍然无法正常工作。
【解决方案2】:

我在使用 ejs 渲染时遇到了同样的问题。我的代码中包含一些空白,导致定位问题。

我在互联网上到处寻找,终于建立了自己的解决方案:

    var clean= function(selecteur) {
        var save=new Array();
        selecteur.children().each(function() {
            save.push(this);
        });
        selecteur.empty();
        for(i in save) {
            selecteur.append(save[i]);
        }
    };

可以在任何需要从任何空白中清除的 jquery 选择器容器上调用此函数。它的工作原理基本上是将所有内容保存在局部变量中,清空容器,然后添加保存的内容。

【讨论】:

    【解决方案3】:

    我遇到了同样的事情,至少在我的情况下这是由于 EJS 部分函数使用

    fs.readFileSync(file, 'utf8')
    

    根据

    https://github.com/nodejs/node-v0.x-archive/issues/1918

    不删除 UTF-8 BOM。虽然如果 EJS 引擎为我们剥离 BOM 会很好,但在没有 BOM 的情况下将部分文件保存为 UTF-8 解决了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-19
      • 2019-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多