在javascript IDE中测试DOM方法而不是在浏览器控制台中

时间:2017-05-01 19:05:34

标签: javascript dom console ide

我想知道为什么当使用任何支持javascript语言的IDE时,如果您尝试使用HTML或任何DOM选择器方法获取document.querySelectorAll()页面的元素,它将返回运行时错误ReferenceError: document is not defined

document仅在浏览器javascript中在控制台中构建的原因吗?

我的问题是我只需要在我的IDE上运行javascript app而不是在浏览器控制台上进行测试。

如果有任何建议的解决方案,请提及。

2 个答案:

答案 0 :(得分:1)

在我的IDE"运行"你是什么意思? ?

我认为你宁愿谈论服务器端的渲染。

无论哪种方式,是的,该文档仅存在于浏览器上,如果没有做任何模拟它。但是有一些模拟文档的解决方案,例如jsdom

https://github.com/tmpvar/jsdom

例如,在没有浏览器的情况下在服务器端运行单元测试,测试需要DOM并具有某些逻辑的UI组件是很有用的。

答案 1 :(得分:0)

根据jony89's answer中的建议,使用NodejsjQueryjsdom库在我的案例中起作用的最终解决方案。

在较新的jsdom v10 API中,我应该将HTML页面解析为JSDOM构造函数,以获得我期望的结果。

但是将整个HTML页面传递给JSDOM构造函数很困难且不方便,所以我使用了另一种更简单的方法来使用旧的jsdom API和jsdom.env()方法完全解决它:

https://github.com/tmpvar/jsdom/blob/master/lib/old-api.md

我传递了我想在其上使用DOM方法的页面网址,然后在我的nodejs IDE上打印输出:

var jsdom = require("jsdom/lib/old-api.js");

jsdom.env(
    "http://www.ammanu.edu.jo/English/Research/Research.aspx",
    ["http://code.jquery.com/jquery.js"],
    function (err, window) {
        var $ =  window.$;
        var a = $("section a");
        for(var i = 0; i < a.length; i++){
           console.log(a[i].getAttribute("href"));
        }
    }
);