我想知道为什么当使用任何支持javascript语言的IDE时,如果您尝试使用HTML
或任何DOM选择器方法获取document.querySelectorAll()
页面的元素,它将返回运行时错误ReferenceError: document is not defined
?
是document
仅在浏览器javascript中在控制台中构建的原因吗?
我的问题是我只需要在我的IDE上运行javascript app而不是在浏览器控制台上进行测试。
如果有任何建议的解决方案,请提及。
答案 0 :(得分:1)
在我的IDE"运行"你是什么意思? ?
我认为你宁愿谈论服务器端的渲染。
无论哪种方式,是的,该文档仅存在于浏览器上,如果没有做任何模拟它。但是有一些模拟文档的解决方案,例如jsdom
:
https://github.com/tmpvar/jsdom
例如,在没有浏览器的情况下在服务器端运行单元测试,测试需要DOM并具有某些逻辑的UI组件是很有用的。
答案 1 :(得分:0)
根据jony89's answer中的建议,使用Nodejs
,jQuery
和jsdom
库在我的案例中起作用的最终解决方案。
在较新的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"));
}
}
);