如何在Node.js上获取jQuery方法?

时间:2015-11-18 12:58:53

标签: javascript jquery node.js

在客户端使用Object.keys($.fn)(或Object.keys(jQuery.fn))可以很好地将jQuery函数作为数组。

如何使用jquery package from npm获取相同的数组?

我试过了:

  • require("jquery").fn => undefined(因为我们必须初始化它,提供窗口对象)
  • 我尝试像这样初始化jQuery函数:

    var $ = require("jquery")({
        // Simulate the document object
        document: {
            createElement: function () {
                return {
                    parentNode: {
                        removeChild: function () {
    
                        }
                    }
                }
            }
        }
    });
    

    以这种方式运行我收到此错误:

    /home/...node_modules/jquery/dist/jquery.js:897
    var div = document.createElement("div");
                      ^
    
    TypeError: Cannot read property 'createElement' of undefined
    

所以,基本上,我真的不想在Node.js中使用 jQuery,而只是为了获取jQuery方法的数组(比如在客户端上),避免在代码中对其进行硬编码

这可能吗?

2 个答案:

答案 0 :(得分:0)

尝试使用https://github.com/tmpvar/jsdom,它提供了DOM的部分实现,特别是在节点中使用,甚至允许您在模拟窗口中动态加载jquery。像这样:

var jsdom = require("jsdom");

jsdom.env(
  '<p></p>',
  ["http://code.jquery.com/jquery.js"],
  function (err, window) {
    console.log(Object.keys(window.$.fn));
  }
);

答案 1 :(得分:0)

Jquery中有静态方法和实例方法,你可能想要同时使用它们,并使用Object.assign()克隆它们。

你应该尝试迭代它们,如:

var jsdom=require('jsdom').jsdom;
var document = jsdom("hello world");
var window = document.defaultView;

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


var clonedInstanceMethods = {};
for (var instancemethod in jQuery.prototype){
    Object.assign(clonedInstanceMethods,jQuery.prototype[instancemethod])
}

console.log(clonedInstanceMethods);

现在对静态方法做同样的事......就像那样。你得到了照片。

我们使用jsdom来创建一个窗口。 现在应该工作。