JSDom Alternative有完整的Sizzle支持吗?

时间:2012-10-06 16:20:46

标签: node.js cloudfoundry sizzle jsdom appfog

对于一些范围,我有一个我在cloudfoundry上运行的抓取应用程序。由于所讨论的Contextify问题here,我无法使用jsdom来执行此操作。

为了解决这个问题,我开始用Cheerio取代jsdom,但是我现在意识到它并不完全支持我需要用来处理已删除数据的Sizzle选择器。

经过一番研究后,我开始认为自己已经碰到了一堵砖墙 - 还有另一种解决方法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

抱歉这延迟了。您现在可以在Cloudfoundry上成功安装JSDOM,但是,似乎某些功能不可用。创建浏览器窗口,例如使用jQuery是不可能的。但是,您可以创建一个jsdom文档。

给出以下示例;

  var http = require('http');
  var util = require('util');
  var jsdom = require("jsdom");

  http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});

    res.write("JSDom object;");
    createDocAndQuery(res);

    res.write("\nNumber of node.js releases = ");
    getLinkCount(res);

  }).listen(3000);

  function createDocAndQuery(response) {
    var doc = jsdom.jsdom("<html><body></body></html>", jsdom.level(1, "core"));
    response.write(util.inspect(doc));
  }

  function getLinkCount(response) {
    jsdom.env(
      "http://nodejs.org/dist/",
      ["http://code.jquery.com/jquery.js"],
      function (errors, window) {
        response.end ("" + window.$("a").length)
      }
    );
  }

第一部分在CloudFoundry.com上工作,第二部分在创建窗口对象时失败。