是否有可能在服务器端使用Node.js使用jQuery选择器/DOM操作?


当前回答

模块jsdom是一个很棒的工具。但如果你想评估整个页面,并在服务器端做一些奇怪的事情,我建议在它们自己的上下文中运行它们:

vm.runInContext

所以像require / CommonJS这样的东西不会破坏你的Node进程本身。

你可以在这里找到相关文档。干杯!

其他回答

警告

这个解决方案,正如Golo Roden提到的是不正确的。它只是一个快速修复,帮助人们使用Node应用程序结构运行实际的jQuery代码,但它不是Node哲学,因为jQuery仍然运行在客户端,而不是在服务器端。我很抱歉给了一个错误的答案。


您还可以使用节点渲染Jade,并将jQuery代码放在其中。下面是jade文件的代码:

!!! 5
html(lang="en")
  head
    title Holamundo!
    script(type='text/javascript', src='http://code.jquery.com/jquery-1.9.1.js')
  body
    h1#headTitle Hello, World
    p#content This is an example of Jade.
    script
      $('#headTitle').click(function() {
        $(this).hide();
      });
      $('#content').click(function() {
        $(this).hide();
      });

你可以使用Electron,它允许混合browserjs和nodejs。

之前,我尝试在nodejs中使用canvas2d,但最后我放弃了。它不被nodejs默认支持,并且很难安装它(很多很多…dependeces)。 直到我使用电子,我可以很容易地使用所有我以前的browserjs代码,甚至WebGL,并传递结果值(例如。结果base64图像数据)到nodejs代码。

我相信这个问题的答案是肯定的。 https://github.com/tmpvar/jsdom

var navigator = { userAgent: "node-js" };  
var jQuery = require("./node-jquery").jQueryInit(window, navigator);

您必须使用新的JSDOM API来获取窗口。

const jsdom = require("jsdom");
const { window } = new jsdom.JSDOM(`...`);
var $ = require("jquery")(window);

这些解决方案在我的电子应用程序中没有一个对我有帮助。

我的解决方案(变通方案):

npm install jquery

在index.js文件中:

var jQuery = $ = require('jquery');

在你的.js文件中,以这样的方式编写jQuery函数:

jQuery(document).ready(function() {