nodejs + jsdom,jQuery奇怪的行为

时间:2011-04-28 07:55:18

标签: javascript jquery node.js serverside-javascript jsdom

下面的代码只是我的server.js文件中的一小段,只是为了运行jsdom文档提供的测试。

var window = jsdom.jsdom().createWindow();
jsdom.jQueryify(window, './jq.min.js' , function() {
  console.log('inside');
  window.$('body').append('<div class="testing">Hello World, It works</div>');
  console.log(window.$('.testing').text());
  console.log('end');
});

我从字面上得到的输出只是inside,然后服务器挂起并且永远不会返回。我添加了一个调试语句console.log(window);来查看窗口对象是否真正被创建,并且我最终得到一个相当大的输出语句,详细说明了对象的内容。但我注意到的一件事是输出表明$window对象的已定义方法,实际上console.log(window.$);呈现{{ 1}}。

我理解jsdom仍处于开发模式,但是我在这里缺少一些东西吗?

正如一些背景知识一样,我尝试了几种代码变体,包括使用undefined方法以及从现有HTML标记构建文档,这些文档都没有呈现预期结果。

1 个答案:

答案 0 :(得分:-1)

我希望此代码段可以帮助您:

createWindow = function(fn) {
    var window  = jsdom.jsdom().createWindow(),
        script = window.document.createElement('script');

    jsdom.jQueryify(window, function() {
        script.src = 'file://' + __dirname + '/some.library.js';
        script.onload = function() {
            if (this.readyState === 'complete') {
                fn(window);
            }
        }
    });
}

createWindow(function(window) {
    // Do your jQuery stuff:
    window.$('body').hide();
});

from here