CSS 2.1 の Counter 構文 や CSS 3 の Lists モジュール のような、任意の要素に色んなタイプの連番を自動的にふる jQuery プラグイン、jQuery Counter Plugin を書いた。ol
要素ほか順列リストのマーカー部分を柔軟にコントロールしたい、というのが主な目的だけど、個人的な裏テーマは JavaScript の配列と正規表現の勉強。
Demo
Download
Usage
例えば以下のようなごく普通の ol
要素に適用する場合。
<ol>
<li>List Item</li>
<li>List Item</li>
<li>List Item</li>
</ol>
プラグインを jQuery と一緒に読み込んで、setCounter()
で呼び出す:
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.counter.js"></script>
<script type="text/javascript">
$(function() {
$('ol').setCounter();
});
</script>
その結果、以下のように li
要素の子要素としてマーカーが生成される。同時に display
プロパティの値が list-item
である場合はデフォルトのマーカーが非表示に:
<ol style="list-style-type: none;">
<li><span class="marker"><span class="marker-body">1</span>. </span>List Item</li>
<li><span class="marker"><span class="marker-body">2</span>. </span>List Item</li>
<li><span class="marker"><span class="marker-body">3</span>. </span>List Item</li>
</ol>
これだけだと普通の ol
と変わらないようにも見えるけど、マーカー部分を装飾できたり、display
プロパティでインライン化してもマーカーが消えなかったりとか、CSS で柔軟なコントロールが可能になるのは地味に便利、と自負。
そのほか、オプションを指定すれば list-style-type: cjk-heavenly-stem
とか content: "[" counter(section, upper-roman) "] ";
的なことも可能。
Options
オプションはオブジェクトで指定。
$(function() {
$('dl').setCounter({
selector: 'dt',
start: 8,
markerType: 'あ',
markerLeft: '(',
markerRight: ') '
});
});
</script>
selector
- 番号をふる子要素。この値を jQuery の
children()
に渡すので、指定できるのは直接の子要素のみ。デフォルトでは空白なので、ol
ならli
に番号がふられる。たとえばdl
要素のうちdt
要素にだけ番号を付与したい場合なら、$('dl').setCounter({ selector: 'dt' });
となる。 start
- 開始する番号。デフォルトは
1
。 markerType
- CSS の
list-style-type
にあたる部分で、デフォルトではアラビア数字 (1, 2, 3…)。以下のキーワードを指定できる。 -
値 出力例 説明 01
01, 02, 03 … 09, 10, 11 … アラビア数字の 0 詰め (2 桁)。 001
001, 002, 003 … 099, 100, 101 … アラビア数字の 0 詰め (3 桁)。 0001
0001, 0002, 0003 … 0999, 1000, 1001 … アラビア数字の 0 詰め (4 桁)。 a
a, b, c … x, y, z ラテン文字 (小文字)。 A
A, B, C … X, Y, Z ラテン文字 (大文字)。 i
i, ii, iii … ix, x, xi … ローマ数字 (小文字)。3999 まで。 I
I, II, III … IX, X, XI … ローマ数字 (大文字)。3999 まで。 A
A, B, C … X, Y, Z ラテン文字 (大文字)。 あ
あ、い、う … わ、を、ん 平仮名のあいうえお。 ア
ア、イ、ウ … ワ、ヲ、ン 片仮名のアイウエオ。 い
い、ろ、は … せ、す、ん 平仮名のいろは。 イ
イ、ロ、ハ … セ、ス、ン 片仮名のイロハ。 子
子、丑、寅 … 酉、戌、亥 十二支。全 12 文字。 甲
甲、乙、丙 … 辛、壬、癸 十干。全 10 文字。 一
一、二、三 … 九、十、十一 … 漢数字。9999 まで。 壱
壱、弐、参 … 玖、壱拾、壱拾壱 … 漢数字 (大字)。9999 まで。 〇
一、二、三 … 九、一〇、一一 … 漢数字 (位取り記数法)。9999 まで。 markerLeft
- マーカーの左側に記号などを挿入できる。デフォルトではからっぽ。たとえば
{markerType: '壱', markerLeft: '其の'}
で「其の壱、其の弐、其の参 …」など。 markerRight
- 同じくマーカーの右側に挿入する記号。デフォルトは
'. '
で、ol
要素のよくある感じになる。
ToDo
漢数字やローマ数字の位の計算で挫折しかけたけど、なんとか思っていたものができたのでとりあえずは満足。でもまだまだ改良の余地があるはずなので、課題をいくつかリストアップしておく。
switch
文と if 文の使い分け方がスマートじゃない気が。とくに 0 詰めのあたりとか、妙にうざい。- jQuery プラグインでありながらあまり jQuery っぽくない気が。なにかものすごく便利なメソッドを忘れてるような。
- 漢数字の 10000 以上に対応すべきか? 桁の計算式が面倒くさそうってのもあるけど、「那由他」とか「不可思議」とか中二っぽくてちょっと…
- デモ作るのって難しいなー…