首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Node中与jsdom和jquery共享变量范围

问在Node中与jsdom和jquery共享变量范围
EN

Stack Overflow用户
提问于 2014-11-04 16:13:48
回答 1查看 322关注 0票数 0

因此,我用jsdom和jquery编写了一个简单的页面刮板,并遇到了一个我不知道如何解决的问题。

下面是一些有用的代码(更改了URL):

代码语言:javascript
复制
var jsdom = require("jsdom");
var fs = require('fs');
var jquery = fs.readFileSync("./js/jquery-min.js").toString();

//There's two pages of product, here's page 1
jsdom.env({
        url: 'http://exampleshoppingpage.com',
        src: [ jquery ],
        done: function(error, window){
                var $ = window.$;
                $('.productlist .product .title a').each(function() {
                        console.log($(this).text());
                });
        } 
});

//And do the exact same thing for page 2
jsdom.env({
        url: 'http://exampleshoppingpage.com?page=2',
        src: [ jquery ],
        done: function(error, window){
                var $ = window.$;
                $('.productlist .product .title a').each(function() {
                        console.log($(this).text());
                });
        } 
});

但我真正想做的是,在打印出来之前,把所有这些产品整理一下。以下是我的尝试:

代码语言:javascript
复制
var jsdom = require("jsdom");
var fs = require('fs');
var jquery = fs.readFileSync("./js/jquery-min.js").toString();
var products = [];


//There's two pages of product, here's page 1
jsdom.env({
        url: 'http://exampleshoppingpage.com',
        src: [ jquery ],
        done: function(error, window){
                var $ = window.$;
                products $('.productlist .product .title a').each(function() {
                        products.push($(this).text());
                });
        } 
});

//And do the exact same thing for page 2
jsdom.env({
        url: 'http://exampleshoppingpage.com?page=2',
        src: [ jquery ],
        done: function(error, window){
                var $ = window.$;
                $('.productlist .product .title a').each(function() {
                        products.push($(this).text());
                });
        } 
});

products = products.sort();
console.log (products.join("\n"));

我得到了一个空数组。我尝试过其他一些方法来判断我是不是在做傻事。我假设它与jsdom中的jQuery有关,而不是与程序的外部部分共享范围?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-04 17:10:56

在这种情况下,我们必须记住异步思考。您的作用域很好,但是您正在尝试在products填充数据之前将其转储到控制台。

还有,Array.prototype.sort() 直接在数组上操作。它不返回数组。

代码语言:javascript
复制
var jsdom = require("jsdom");
var jquery = "http://code.jquery.com/jquery.js";

var products = [];

//  page 1
jsdom.env({
        url: 'http://news.ycombinator.com/',
        scripts: [ jquery ],
        done: function(error, window){
                var $ = window.$;
                $('td.title:not(:last) a').each(function() {
                        products.push( $(this).text() );
                });
                //      page 2
                jsdom.env({
                        url: 'https://news.ycombinator.com/news?p=2',
                        scripts: [ jquery ],
                        done: function(error, window){
                                var $ = window.$;
                                $('td.title:not(:last) a').each(function() {
                                        products.push( $(this).text() );

                                });
                                products.sort();
                                console.log( products );
                        }
                });
        }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26739854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档