jQueryプラグインの作成方法

jQueryプラグインの作成方法

今回は、jQueryプラグインの作成方法について、実際にサンプルコードを用いて、詳しく記載していこうと思います。

jQueryでは、自分で作成したオリジナルのメソッドをプラグイン化することが可能です。例えば前回ご紹介した、jQueryを利用したパブパネル、これをひとつのメソッドとしてしまえば「プラグイン」にすることができます。また、今回の内容では、タブパネルをメソッドにしてみますが、メソッドの作成方法は複数あります。Webデザインで利用するメソッドは、特定のオブジェクトに対して何かをする、というものがほとんどになります。

という事で、それでは今回はッ、

  • ・jQueryプラグイン化メソッドの作成
  • ・プラグイン化メソッドの利用方法

上記について記載していこうと思います…。

jQueryプラグイン化メソッドの作成

オブジェクト操作のためのメソッドを作成するには、下記のように記述します。

$.fn.メソッド名 = function(){
/* ここにメソッドの処理 */
}

上記のように作成したメソッドは、他のメソッドと同じように利用することができます。
例えば、作成したメソッド名がMkMethodの場合は、下記のような記述になります。

$(“#point”)MkMethod();

そしてここで指定したセレクタ、つまり上記では#pointが、メソッド内ではthisとして利用できます。

$.fn.MkMethod = function(){
/* #pointはthisとして利用することができる */
}

上記を踏まえ、前回記載いたしましたタブパネルを、ひとつのメソッドにまとめたものを記載してみます。

サンプルScript<script>
/* メソッドを作成 */
$.fn.jqueryTab = function(){——①
this.each(function(){
var tab = this;——②
var activePanel = $(“.active a”,tab).attr(“href”);ここから▼③以下
$(“.panel > div:not(” + activePanel + “)”, tab).hide();
$(” > ul a”,tab).click(function(){
$(” > ul li.active”,tab).removeClass(“active”);
$(“.panel > div”,tab).hide();
$(this).parent(“li”).addClass(“active”);
$($(this).attr(“href”)).show();
return false;
});ここまでが▲③上記
});
return this;——④
};
/* メソッドの実行 */
$(function(){
$(“#tab1,#tab2”).jqueryTab();
});
</script>

①の部分は、先ほどの説明通り、任意の名前を付けてメソッドとして定義する部分になります。今回はjqueryTabというメソッド名を付けています。そして複数のタブを設置することを念頭に、each()メソッドで囲んでおきます。

また、ここで使用されているthisは、$()で囲んでいません。プラグイン化のコードの中で渡されるthisは、はじめからjQueryオブジェクトになっています。そのため$(this)とする必要はありません。

続く②では、tabという変数を作成して、thisを代入しています。このthisはeach()メソッドの中なので、「現在処理中の#tab」ということになります。

そして③の部分のコードは、基本的に前回のコードと同じになります。ただセレクタで#tabとしていた部分を、変数tabに変更しています。

前回のコードとの変更点

var activePanel = $(“#tab .active a”).attr(“href”);
$(“#tab .panel > div:not(” + activePanel + “)”).hide();

var activePanel = $(“.active a”,tab).attr(“href”);
$(“.panel > div:not(” + activePanel + “)”, tab).hide(); /p>

基本的に上記と同様にセレクタ#tabを変数tabを使ったコードに修正しています。

メソッド一番最後にreturn thisサンプルScriptのメソッド作成のコードには、一番最後の行④にreturn this;と記述しています。実はこの一行がなくとも、作成したメソッドはキチンと動作しますが、実はメソッドチェーンを考慮した記述になります。作成したメソッドに続いて、他のメソッドをメソッドチェーンでつなぐ際、return thisと記述しておくことにより、次のメソッドにthisを渡すことができます。この記述がないとメソッドチェーンが機能しませんので、覚えておくことをオススメします。
変数thisに注意!サンプルScriptのコードには、変数thisが5つ登場しています。②の部分はeach()によってそれぞれ取得された要素、③の部分はクリックされたa要素が代入されています。変数thisは便利な一方、このように記述されている場所によって中身が変化するので注意が必要になります。

プラグイン化メソッドの利用方法

上記まででタブパネルのコードをひとつのメソッドにまとめることができました。つまりプラグイン化になります。これを利用する場合は、他のメソッドと同じように、下記のように記述して利用します。

$(function(){
$(“#tab”).jqueryTab();
});

複数のタブを利用する場合は、グループセレクタで指定しても問題ありません。またeach()メソッドを利用しているので、下記のようにも記載できます。

$(function(){
$(“#tab,#tab2”).jqueryTab();
});

仮にeach()メソッドを利用していない場合は、下記のように複数記述することで、複数のタブを設置することも可能になります。

$(function(){
$(“#tab”).jqueryTab();
$(“#tab2”).jqueryTab();
});


今回と前回のサンプルでは、分かりやすいようにメソッドの作成コードとメソッドの実行コードを同じファイルに記述していましたが、作成したメソッドはjQuerysample.jsなどの名前を付けて、別ファイルにして外部化して読み込むことも可能です。また、外部化につきましては、多少、注意する点などがありますので、別記事にまとめようと思います。

IDとクラスのどちら?以前CSSの記事を記載する際も少し記載したように思いますが、今回のサンプルでは、クラスではなくIDを利用しました。JavaScriptでは、クラスがつけらてた要素を探すよりも、IDで探したほうが処理速度が速くなります。今回のサンプルのように、ページ内にひとつだけ、もしくは多くても数個で済むような場合は、ID属性で指定することをオススメします。逆にページ内にクラスが多数あることを前提として、初めからクラスを指定する場合もあります。

といことで今回は、jQueryプラグインの作成方法について、サンプルコードを交え記載いたしました。

ご自身でオリジナルのメソッドを作成することができるようになり、ひとつのメソッドとしてまとめてしまう「プラグイン」まで出来るようになると、色々なサンプルを保存しておくことで、ページ作成でjQueryを使用する際、とても汎用性が広がることと思います。また、Web上には色々なjQueryのサンプルコードが散らばっていますので、そのコードを読み解くことで、スキルアップも望めることと思います。

とりあえず、今回はここまで…。

お仕事のご依頼は↓コチラより…、それではまた次回…。