Jsdom没有归还文件

时间:2016-06-09 22:56:02

标签: javascript html jsdom

我正在尝试使用jsdom加载本地HTML文件,这是代码

var config = {
      file: "filename",
      scripts: ["node_modules/jquery/dist/jquery.min.js"]
      done: function(err, window){
          console.log(window.document.URL)
          console.log(window.document.children)
      }
}
jsdom.env(config)

window.document.URL显示正确的网址,但window.document.innerHTML没有任何数据。我甚至试过

var config = {
      text: *raw-html*,
      scripts: ["node_modules/jquery/dist/jquery.min.js"]
      done: function(err, window){
          console.log(window.document.children)
      }
}

但我有同样的结果,有什么帮助?

更新

我找到了

var rawhtml = fs.readFileSync("filename.html","utf8")
jsdom.env(
  rawhtml,
  ["http://code.jquery.com/jquery.js"],
  function (err, window) {
    console.log(window.$("html").html())
  }
);

按预期工作(它会记录html标记内的所有内容)

然后我发现了

config = {
  file: "filename.html",
  scripts: ["http://code.jquery.com/jquery.js"],
  done: function (err, window) {
    var $ = window.$;
    console.log($("html").html());
  }
} 
jsdom.env(config); 

也可以,但是也不能正确创建document对象

“解决方案”

jsdom没有以与浏览器控制台相同的方式显示document.children的输出,但是,您期望的所有功能都存在。最终工作document对象位于

之下
var func = function(document){
  console.log(document.body.innerHTML)
  document.body.innerHTML = "i changed the body"


}
function getdoc(file, func){
  var document;
  jsdom.env(
    file,
    (err, window) => {
      document = window.document
      func(document)
      }
  );
}
getdoc("index.html",code)

我使用jsdom.env()获取document,然后将document传递给func,其中所有有趣的javascript魔法都可以自由发生。请注意,需要手动保存对document所做的任何更改。

1 个答案:

答案 0 :(得分:1)

没有document.innerHTML属性。

检查"innerHTML" in document;你得到false