web-dev-qa-db-fra.com

Extension d'une fonction jQuery existante

J'essaie d'écrire un plugin qui étendra une fonction existante dans jQuery, par exemple.

(function($)
{
    $.fn.css = function()
    {
        // stuff I will be extending
        // that doesn't affect/change
        // the way .css() works
    };
})(jQuery);

Il ne faut que quelques bits pour étendre la fonction .css(). Rappelez-vous que je posais la question. Je pensais aux classes PHP puisque vous pouvez className extend existingClass. Je demande donc s'il est possible d'étendre les fonctions jQuery.

38
MacMac

Bien sûr ... Sauvegardez simplement une référence à la fonction existante et appelez-la:

(function($)
{
    // maintain a reference to the existing function
    var oldcss = $.fn.css;
    // ...before overwriting the jQuery extension point
    $.fn.css = function()
    {
        // original behavior - use function.apply to preserve context
        var ret = oldcss.apply(this, arguments);

        // stuff I will be extending
        // that doesn't affect/change
        // the way .css() works

        // preserve return value (probably the jQuery object...)
        return ret;
    };
})(jQuery);
74
Test Employee 1

Même façon mais un peu différente de la meilleure réponse de cette question:

// Maintain a reference to the existing function
const oldShow = jQuery.fn.show

jQuery.fn.show = function() {
  // Original behavior - use function.apply to preserve context
  const ret = oldShow.apply(this, arguments)

  // Your source code
  this.removeClass('hidden')

  return ret
}
0
Kevin Campion