将 require('jquery') 与 jsdom 一起使用?

发布于 2024-11-28 19:17:53 字数 670 浏览 1 评论 0原文

我可以使用 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对象在哪里?

I can use JSDOM's 'scripts' option to load jquery for scraping. However I was wondering if it was possible, and also better or worse, to use node's own require mechanism now npm includes 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)

All works fine and shows the updated document. But these days we can also run:

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

Which I find neater - I'm just not quite sure of how to use jquery and jsdom in this newer manner. Specifically, where is the window object?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

洛阳烟雨空心柳 2024-12-05 19:17:53

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

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

Final working code below - it looks like node-jquery has an pre-built, empty document at 'body', to access the final document, you can just run .html() on it.

var $ = require('jquery')
$('body').append("<div class='testing'>Hello World</div>")
console.log($("body").html())
逆光飞翔i 2024-12-05 19:17:53

如果您确实需要访问窗口:

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

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

If you really need to get at the window:

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

Use with caution, ._ properties are seen as private

才能让你更想念 2024-12-05 19:17:53

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文