2

假设我有加载了几个插件的 jQuery。

我运行一些这样的代码:

$('someSelector').someMethod('someParam', 'someOtherParam');
$('someOtherSelector').someOtherMethod('anotherParam');
$('anotherSelector').anotherMethodWhichMayOrMayNotBeAPlugin();

我想为 jQuery 编写一个钩子,以记录我将持有的结构:

  • 使用了什么选择器
  • 调用了哪个方法
  • 它得到了什么论据

我知道我可以覆盖两者$()以捕获选择器,并且可以向 jQuery 添加方法(通过编写插件),但我不完全确定如何获取方法的名称和参数,同时避免破坏 jQuery 及其插件的现有功能。

性能对这个来说不是很重要,所以任何动态的方式都可以。

4

1 回答 1

3

您可以遍历其中的所有函数$.fn并用您自己的函数替换它们中的每一个。

反过来,该函数可以记录调用它的 jQuery 对象的选择器及其接收的参数,然后调用原始函数。

就像是:

$.each($.fn, function(key, func) {
    if ($.isFunction(func)) {
        $.fn[key] = function() {
            console.log("Method '" + key + "' was called");
            console.log("  on selector '" + this.selector + "'");
            console.log("  with arguments: " + arguments);
            return func.apply(this, arguments);
        };
    }
});
于 2012-11-14T11:13:26.193 回答