jQueryの関数をフックする

jQueryオブジェクトの各関数ですが、jQuery.fnに定義されています。

なので、jQueryオブジェクトの各関数をフックしたい場合には、jQuery.fnに定義されているものを差し替えます。

たとえば、showメソッドをフックして、他の処理を入れたい場合には下記のように書きます。

// 元の関数を退避
jQuery.fn._show = jQuery.fn.show; 

jQuery.fn.show = function() {
  // 追加したい処理をここに記載

  // 元の関数を呼び出し
  return jQuery.fn._show.apply(this, arguments);
};

idがcontext-menuの要素に対してshowメソッドが呼ばれた場合などは、下記のような感じで。

jQuery.fn._show = jQuery.fn.show; 

jQuery.fn.show = function() {

  if (this.attr('id') == 'context-menu') {
    // context-menuの場合には、処理を呼び出し
    appendMenu();
  }

  return jQuery.fn._show.apply(this, arguments);
};