如何在 jsdom@5 中使用 jQuery?
How to use jQuery with jsdom@5?
我正在从 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.1
、jsdom@5.4.1
和 jquery@2.1.4
。
将 jQuery 与 jsdom@5 一起使用的正确方法是什么?
以下内容更符合您的尝试。查看 repo
// 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,即 removed in jsdom 1.0.0-pre.1. (Note that the document.parentWindow
suggested in that change log entry was then itself removed in 4.0.0。)
official documentation 建议使用 jsdom.env
和 jsdom.jQueryify
api。
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());
});
正在查看文档 https://github.com/tmpvar/jsdom。这应该适用于 jsdom@11.5.1
var jsdom = require('jsdom');
const { JSDOM } = jsdom;
const { window } = new JSDOM('<html></html>');
var $ = require('jquery')(window);
我正在从 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.1
、jsdom@5.4.1
和 jquery@2.1.4
。
将 jQuery 与 jsdom@5 一起使用的正确方法是什么?
以下内容更符合您的尝试。查看 repo
// 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,即 removed in jsdom 1.0.0-pre.1. (Note that the document.parentWindow
suggested in that change log entry was then itself removed in 4.0.0。)
official documentation 建议使用 jsdom.env
和 jsdom.jQueryify
api。
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());
});
正在查看文档 https://github.com/tmpvar/jsdom。这应该适用于 jsdom@11.5.1
var jsdom = require('jsdom');
const { JSDOM } = jsdom;
const { window } = new JSDOM('<html></html>');
var $ = require('jquery')(window);