今回は、要素の数に合わせて値を自動で付与します。例えばliの数を数えて、widthを割り振ったりなど様々な事に応用が可能です。CMSが入っていて要素の数が可変の際、「要素を数える」という処理を行ってみましょう。
デモはこちら
まず下準備
まずこちらはいつも通り、必要なファイルを読み込みます。headerの中に、jQueryと、自分で作ったjavascriptのファイル(今回は count.js とします)を読み込みます。
1 2 |
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" charset="utf-8"></script> <script type="text/javascript" src="count.js" charset="utf-8"></script> |
Step2:次にHTMLの準備
今回は、全体を囲むdivと、その中にliを並べました。divに id=”wrap“を付けています。
1 2 3 4 5 6 7 |
<div id="wrap"> <ul class="parts"> <li>パーツ1</li> <li>パーツ2</li> <li>パーツ3</li> </ul> </div> |
Step3:jsを書き込む
「 .index() 」を使用すると、要素の数を調べることができます。
1 |
var count = $('li').index(); |
※「 .index() 」は、0からカウントされるので、計算式に使う場合は+1します。(liが3つある場合は、countには2が代入されます)
上記を応用して、読みこんだjsファイル、 count.js に処理を書いていきます。
1 2 3 4 5 6 7 8 9 10 |
$(function(){ var count = $('#wrap .parts li').index()+1; var partsWidth = $('#wrap').width()/count; $('#wrap .parts li').each(function(){ $(this).width(partsWidth); }); }); |
詳しく書くと、こう。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$(function(){ //liの数を調べる。値をcountに代入 var count = $('#wrap .parts li').index()+1; //#wrapの横幅を、countで割り算。結果をpartsWidthに代入。 var partsWidth = $('#wrap').width()/count; //全てのliにcss widthを設定。値はpartsWidth。 $('#wrap .parts li').each(function(){ $(this).width(partsWidth); }); }); |
要素の数をカウントできれば、他にも「liが5個以上の時にはmoreリンクを表示」なんて処理も作れたりします。色々と応用することができますね。
こちらは余談です。.hover()でwidthの値を操作したくて、処理を書いていたのですが、jQueryではwidth:auto;をサポートしていないという事実が発覚し、現在格闘中です。空文字「”」そ代入すれば初期値に戻せるようなのですが、やってみると「0px」になってしまったり…解決できるでしょうか。