переопределение функции jQuery.find () для обеспечения дополнительной функциональности - PullRequest
3 голосов
/ 16 марта 2011

Я хочу переопределить jQuery.find, чтобы переопределить дополнительную функциональность. Для этого я использовал идею, обсуждаемую в блоге Бена Наделя (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?

Ответы [ 3 ]

1 голос
/ 16 марта 2011

Демонстрация в вашей ссылке использует функцию от .fn.

jQuery.fn.remove

Где вы переопределяете функцию на

jQuery.find

Переопределяющие функции на этом уровне имеют различное значение для this. Когда вы работаете с .fn. - это возвращаемый результат запроса, который «смешивается» с любым результатом запроса.

Здесь this будет сам корневой объект, и его использование будет другим. Это функции или служебные функции, которые вызываются «статически».

1 голос
/ 16 марта 2011

Вы ищете переопределение / подключение к 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;
    };
})();
0 голосов
/ 16 марта 2011

Я на самом деле не вижу ошибок в вашем коде.Это правда, что в примере используется прототип jQuery ("fn"), однако вы также можете манипулировать $ .find.В основном я скопировал тот же код, который вы указали в следующем примере:

var oldFind = $.find;

$.find = function() {
    console.log("something new.");

    console.log(oldFind.apply(this, arguments));
};

$.find("div");

Понимаете, вы можете выполнять это особым образом.Выше у вас есть:

(function() {...})();

Это делает код в первых парах самореализующимся (поправьте меня, если я ошибаюсь), который может не иметь желаемого намерения, если вы вызываете содержащийся код снаружиэта функция.Рабочий пример приведенного выше фрагмента приведен здесь: http://jsfiddle.net/nuPLV/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...