Override jQuery functions

36,370

Solution 1

You almost had it, you need to set the this reference inside of the old size function to be the this reference in the override function, like this:

var oSize = jQuery.fn.size;
jQuery.fn.size = function() {
    alert(this.length);

    // Now go back to jQuery's original size()
    return oSize.apply(this, arguments);
};

The way this works is Function instances have a method called apply, whose purpose is to arbitrarily override the inner this reference inside of the function's body.

So, as an example:

var f = function() { console.log(this); }
f.apply("Hello World", null); //prints "Hello World" to the console

Solution 2

You can override plugins method by prototype it in a separate file without modifying original source file as below::

(function ($) {
    $.ui.draggable.prototype._mouseDrag = function(event, noPropagation) {

         // Your Code
    },

    $.ui.resizable.prototype._mouseDrag = function(event) {
            // Your code
    }   
}(jQuery));

Now put your logic here or original code with your new idea that is needed in your project.

Share:
36,370

Related videos on Youtube

MotionGrafika
Author by

MotionGrafika

Updated on July 09, 2022

Comments

  • MotionGrafika
    MotionGrafika almost 2 years

    Is there way to override jQuery's core functions ? Say I wanted to add an alert(this.length) in size: function() Instead of adding it in the source

    size: function() {
        alert(this.length)
        return this.length;
    },
    

    I was wondering if it would be possible to do something like this :

    if (console)
    {
        console.log("Size of div = " + $("div").size());
        var oSize = jQuery.fn.size;
        jQuery.fn.size = function()
        {
            alert(this.length);
    
            // Now go back to jQuery's original size()
            return oSize(this);        
        }
        console.log("Size of div = " + $("div").size());
    }
    
  • Jacob Relkin
    Jacob Relkin over 13 years
    @Gabriel Thanks for the link! :)
  • MotionGrafika
    MotionGrafika over 13 years
    Any particular reason why this doesnt work for init ? (function($) { var _o_init = jQuery.fn.init; jQuery.fn.init = function(selector, context) { if (console) console.log("Function Call : init"); return _o_init.apply(this, arguments); } })(jQuery);
  • Paflow
    Paflow over 7 years
    did the same with the data function.. saved my day

Related