我可以使用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。具体来说,窗口对象在哪里?
答案 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