我想覆盖jQuery.find来覆盖额外的功能。我已经使用了Ben Nadel博客上讨论的想法(http://www.bennadel.com/blog/1624-Ask-Ben-Overriding-Core-jQuery-Methods.htm),但由于某种原因它不能用于$ .find(),这是我的代码
(function () {
// Store a reference to the original remove method.
var originalFindFunction = jQuery.find;
// Define overriding method.
jQuery.find = function () {
// Log that we are calling the overridden function.
Console.log("------> Find method called");
// then execute the original method
var results = originalFindFunction.apply(this, arguments);
return results;
};
})();
你知道什么是错的,或者如何覆盖jquery函数?
答案 0 :(得分:1)
您正在寻找覆盖/挂钩jQuery.fn.find
而不是jQuery.find
。
(function () {
// Store a reference to the original remove method.
var originalFindFunction = jQuery.fn.find;
// Define overriding method.
jQuery.fn.find = function () {
// Log that we are calling the overridden function.
Console.log("------> Find method called");
// then execute the original method
var results = originalFindFunction.apply(this, arguments);
return results;
};
})();
答案 1 :(得分:1)
参考中的演示使用.fn.
jQuery.fn.remove
你在
上覆盖一个功能的地方jQuery.find
此级别的覆盖函数对this
具有不同的含义。
当您处理.fn.
时 - 这是返回的查询结果,它与任何查询结果“混合”。
这里,this
将是根对象本身,并且它的用法是不同的。这些是“静态”调用的函数或实用函数。
答案 2 :(得分:0)
我实际上没有看到你的代码有任何错误。这个例子使用的是jQuery原型(“fn”),但你也可以操作$ .find。我基本上复制了您在以下示例中提供的相同代码:
var oldFind = $.find;
$.find = function() {
console.log("something new.");
console.log(oldFind.apply(this, arguments));
};
$.find("div");
意识到,您可能正在以特定方式执行此操作。上面你有:
(function() {...})();
这使得代码在第一个parens中自动执行(如果我在这里错了,请纠正我),如果你在这个函数之外调用包含的代码,这可能没有所需的意图。上面代码段的一个工作示例如下:http://jsfiddle.net/nuPLV/