使用jsdom的require('jquery')?

时间:2011-08-06 23:41:54

标签: jquery coffeescript npm jsdom

我可以使用JSDOM'脚本'加载jquery以进行抓取的选项。然而,我想知道是否可能,以及更好或更坏,使用节点自己的需求机制现在npm包括jquery。

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。具体来说,窗口对象在哪里?

3 个答案:

答案 0 :(得分:2)

下面的最终工作代码 - 看起来node-jquery在'body'有一个预构建的空文档,要访问最终文档,你可以在它上面运行.html()。

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

答案 1 :(得分:1)

如果你真的需要进入窗口:

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

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

答案 2 :(得分:0)

我认为你不能这样做。您正在从JSDOM window对象中获取jQuery对象的特定实例,而require 'jquery'将获取jQuery模块。您需要一个特定于该JSDOM窗口的jQuery对象版本,这意味着要执行$ = window.jQuery