如何在jsdom @ 5中使用jQuery?

时间:2015-05-13 19:04:51

标签: jquery node.js jsdom io.js

我正在从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的正确方法是什么?

3 个答案:

答案 0 :(得分:25)

以下内容更符合您的尝试。查看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。 (请注意,该更改日志条目中建议的document.parentWindow本身就是removed in 4.0.0。)

答案 1 :(得分:8)

查看文档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);

答案 2 :(得分:2)

official documentation建议使用jsdom.jQueryifyjsdom.env apis。

// 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()); }); 方式

clc
clear

A = [{'a'} {'c'} {'d'} {'w'} {'e'} {'t'}];
B = [{'e'} {'b'} {'e'} {'d'} {'z'} {'s'} {'x'}];

A = sort(A);
B = sort(B);

i = 1;
while ~(i > length(A) || i > length(B))
    if isequal(A(i), B(i)) || isequal(A{i}, 'NA') || isequal(B{i}, 'NA')
        i = i + 1;
        continue;
    end

    if A{i} > B{i}
        A = [A(1:i-1) {'NA'} A(i:end)];
    else
        B = [B(1:i-1) {'NA'} B(i:end)];
    end
end

n = length(A) - length(B);
A = [A repmat({'NA'}, [1, -n])];
B = [B repmat({'NA'}, [1, n])];

disp(A)
disp(B)