如何使用jsdom @ 5使用jQuery?

我正在从node.js迁移到io.js,而我的旧node.js代码不能用于jsdom @ 5。

var jsdom=require('jsdom'); var $=require('jquery')(jsdom.jsdom().createWindow); 

这是错误:

 /tmp/iojs/node_modules/jquery/dist/jquery.js:28 if ( !w.document ) { ^ TypeError: Cannot read property 'document' of undefined at module.exports (/tmp/iojs/node_modules/jquery/dist/jquery.js:28:12) at Object.<anonymous> (/tmp/iojs/test.js:2:24) at Module._compile (module.js:431:26) at Object.Module._extensions..js (module.js:449:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:311:12) at Function.Module.runMain (module.js:472:10) at startup (node.js:124:18) at node.js:959:3 

我正在使用最新的io.js v2.0.1jsdom@5.4.1jquery@2.1.4

用jsdom @ 5使用jQuery的正确方法是什么?

以下内容更符合您正在尝试做的事情。 看看回购

  // using Version 5.4.1 var jsdom = require('jsdom').jsdom; var document = jsdom('<html></html>', {}); var window = document.defaultView; var $ = require('jquery')(window); 

你原来的代码的具体问题是它使用了createWindow API,它在jsdom 1.0.0-pre.1中被删除 。 (请注意,该更改日志条目中的document.parentWindowbuild议自身在4.0.0中被删除 。)

官方文档build议使用jsdom.envjsdom.jQueryify

jsdom.env方式

 // Print all of the news items on Hacker News var jsdom = require("jsdom"); jsdom.env({ url : "http://news.ycombinator.com/", scripts : ["http://code.jquery.com/jquery.js"], done : function (err, window) { var $ = window.$; console.log("HN Links"); $("td.title:not(:last) a").each(function() { console.log(" -", $(this).text()); }); } }); 

jsdom.jQueryify方式

 var jsdom = require("jsdom"); var window = jsdom.jsdom().defaultView; jsdom.jQueryify(window, "http://code.jquery.com/jquery-2.1.1.js", function () { window.$("body").append('<div class="testing">Hello World, It works</div>'); console.log(window.$(".testing").text()); });