是否有可能在服务器端使用Node.js使用jQuery选择器/DOM操作?
当前回答
是的,你可以,使用我创建的一个名为nodeQuery的库
var Express = require('express')
, dnode = require('dnode')
, nQuery = require('nodeQuery')
, express = Express.createServer();
var app = function ($) {
$.on('ready', function () {
// do some stuff to the dom in real-time
$('body').append('Hello World');
$('body').append('<input type="text" />');
$('input').live('click', function () {
console.log('input clicked');
// ...
});
});
};
nQuery
.use(app);
express
.use(nQuery.middleware)
.use(Express.static(__dirname + '/public'))
.listen(3000);
dnode(nQuery.middleware).listen(express);
其他回答
据我所知没有。DOM是一个客户端的东西(jQuery不解析HTML,但解析DOM)。
下面是一些当前的Node.js项目:
https://github.com/ry/node/wiki (https://github.com/nodejs/node)
SimonW的djangode非常酷…
您必须使用新的JSDOM API来获取窗口。
const jsdom = require("jsdom");
const { window } = new jsdom.JSDOM(`...`);
var $ = require("jquery")(window);
在写这篇文章的时候,也有保持的Cheerio。
快速,灵活,精益的实现核心jQuery设计 特别是针对服务器。
模块jsdom是一个很棒的工具。但如果你想评估整个页面,并在服务器端做一些奇怪的事情,我建议在它们自己的上下文中运行它们:
vm.runInContext
所以像require / CommonJS这样的东西不会破坏你的Node进程本身。
你可以在这里找到相关文档。干杯!
从jsdom v10开始,.env()函数已弃用。在尝试了很多需要jquery的东西之后,我这样做了:
Var jsdom = require('jsdom'); const {JSDOM} = JSDOM; const {window} = new JSDOM(); const {document} = (new JSDOM(")).window; 全球。文档=文档; var $ = jQuery = require(' jQuery ')(window);
希望这对你或任何面临这类问题的人有所帮助。