1

我可以使用 JSDOM 的“脚本”选项来加载 jquery 进行抓取。但是我想知道现在 npm 包含 jquery 是否有可能,以及更好或更坏,使用节点自己的 require 机制。

jsdom = require 'jsdom'

config =
  html: "<html><body></body></html>"
  scripts: ['http://code.jquery.com/jquery-1.5.min.js']

jsdom.env config, (err, window) ->
  $ = window.jQuery;
  $('body').append("<div class='testing'>Hello World</div>")
  console.log(window.document.innerHTML)

一切正常并显示更新的文档。但是这些天我们也可以运行:

$ = require 'jquery'
$('body').append("<div class='testing'>Hello World</div>")

我发现它更整洁 - 我只是不太确定如何以这种更新的方式使用 jquery 和 jsdom。具体来说,window 对象在哪里?

4

3 回答 3

3

下面的最终工作代码 - 看起来 node-jquery 在“body”处有一个预构建的空文档,要访问最终文档,您只需在其上运行 .html() 即可。

var $ = require('jquery')
$('body').append("<div class='testing'>Hello World</div>")
console.log($("body").html())
于 2011-08-07T10:07:26.993 回答
1

如果你真的需要到窗口:

var jquery = require('jquery');
var ctx = jquery('<p>this is some markup</p>');
console.log(ctx[0].ownerDocument._parentWindow);

谨慎使用,._属性被视为私有

于 2011-08-18T16:21:55.727 回答
0

I don't think you can do this. You are grabbing a specific instance of the jQuery object off of the JSDOM window object, whereas require 'jquery' would grab the jQuery module. You need a version of the jQuery object specific to that JSDOM window, instead, which means doing $ = window.jQuery

于 2011-08-06T23:46:16.947 回答