在Jade视图中提取段落标记之间的文本

时间:2013-02-20 00:18:23

标签: node.js pug express

我尝试在Jade视图中的段落标记之间提取文本,但它不起作用。

我的主题:

<p> My content. </p> <img src="https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcTJ9ylGJ4SDyl49VGh9Q9an2vruuMip-VIIEG38DgGM3GvxEi_H"> <p> Second sentence. </p>

玉观点:

- var content = post.content.slice('/<p>(.*?)<\/p>/g');
p #{content}

结果:

<

2 个答案:

答案 0 :(得分:1)

为什么你需要在服务器端的段落标记之间提取文本??

这将是我们在客户端js上做的事情


在您的情况下,context应该是您传递给玉视图的参数,res.render('view', {context : "My content."})res.locals

这样您就可以在Jade视图中处理#{context}

如果你想在Jade视图中声明变量context

它应该像

  

-var context =“我的内容。”

     

p#{content}


回复jsdom代码

代码

posts[i]未定义。

我想你想迭代帖子,所以你应该在这里使用iterator

您可以在此使用async模块

在这种情况下,map非常合适

在此处查看文档 - &gt; async map

Creation.findAll({where: "state = 1",order: 'id DESC', limit: 2}).success(function(creations) {
    Post.findAll({where: "state = 1",order: 'id DESC', limit: 2}).success(function(posts){

async.map(posts, function(postEntity, callback){
jsdom.env(
            postEntity.content,
            ["http://code.jquery.com/jquery.js"],
            function(errors, window) {
                //deal with errors
                if(errors) return callback(errors);

                postEntity.content = window.$("p").text();
                callback(null, postEntity);
            }
        );
}, function(err, transformedPosts){
    if(err) return callback(err);
    res.render('index', {
        creations: creations,
        posts: transformedPosts,
        title: "Anthony Cluse | Portfolio"
    });
});


});
});

仅供参考,您应该使用控制流库来管理您的回调代码

否则,维护真的很难

我建议async

答案 1 :(得分:0)

var i = 0;
Creation.findAll({where: "state = 1",order: 'id DESC', limit: 2}).success( function(creations) {
    Post.findAll({where: "state = 1",order: 'id DESC', limit: 2}).success(function(posts){
        console.log(posts[i].content);
        jsdom.env(
            posts[i].content,
            ["http://code.jquery.com/jquery.js"],
            function(errors, window) {
                posts[i].content = window.$("p").text();
            }
        );
        i++;
        res.render('index', {
            creations: creations,
            posts: posts,
            title: "Anthony Cluse | Portfolio"
        });
    });
});