<ol>要素内の項目マーカに丸数字を使いたい方のためのスクリプトです。
<ol>要素内の項目マーカの表示形態を変えるには、CSSのlist-style-typeプロパティを用いれば良いのですが、丸数字は残念ながら対応しておりません。
そこで、是非マーカに丸数字を使いたいと言う場合向けのスクリプトです。
実はCSS第二水準を用いれば、この目的は果たせます。
具体的には、以下のようにします。
ol>li {list-style-type: none;text-indent: -1em;}/* <ol>要素直下の 1番目の<li>要素のマーカ。 */ol>li:first-child:before {content: "\2460";/* 丸数字1のUSCコード*/}/* <ol>要素直下の 2番目の<li>要素のマーカ。 */ol>li:first-child+li:before {content: "\2461";/* 丸数字2のUSCコード*/}/* <ol>要素直下の 3番目の<li>要素のマーカ。 */ol>li:first-child+li+li:before {content: "\2462";/* 丸数字3のUSCコード*/}/* <ol>要素直下の 4番目の<li>要素のマーカ。 */ol>li:first-child+li+li+li:before {content: "\2463";/* 丸数字4のUSCコード*/}(中略) /* <ol>要素直下の20番目の<li>要素のマーカ。 */ol>li:first-child+li+li+li+li+li+li+li+li+li+li+li+li+li+li+li+li+li+li+li+li:before {content: "\2473";/* 丸数字20のUSCコード*/}/* <ol>要素直下の21番目以降のスタイル(算用数字で代用)。 */ol>li+li+li+li+li+li+li+li+li+li+li+li+li+li+li+li+li+li+li+li+li {list-style-type: decimal;text-indent: 0;}
ただ、この方法には以下の問題点があります。
まぁ、JAVAスクリプトなしで実現出来るので、悪くは無いという方もいらっしゃるかもしれませんが…。
従って、セキュリティ上の理由からスクリプトを無効にしている場合には、丸が付かない数字がマーカとなる事になります。
尚、丸数字は数値文字参照を用いますので、機種依存の心配はありません。
スクリプトは自由に改変していただいて構いませんが、そのためにも本記事で紹介しているスクリプトの前提条件を仕様として挙げておきます。
となります。
特定の<ol>要素を除外したいと言う方のために、見本コードの中にそのためのヒントを入れておきました。
スクリプトは、HTML文書とは別のファイルで保存し、注釈リストを含むHTML文書では当該スクリプトを文書中の任意の箇所に<script>要素で埋め込むように記述します。
スクリプトはHTML文書の読込が完了すると自動的に処理スクリプトを起動して、DOMに対応しているグラフィカルなウェブブラウザでは文書内の<ol>要素のマーカを丸数字に変えます。
以下のようなスクリプトを書いて、それをHTML文書からリンクすれば、対応している環境では、全ての<ol>要素直下の各項目のマーカとして丸数字が表示される事になります。
onload4olmarker=window.onload;window.onload=function () {if (onload4olmarker) onload4olmarker();// 対応出来ない環境を弾く。if (!document.getElementById ||navigator.userAgent.indexOf('Opera/6')>-1 ||navigator.userAgent.indexOf('Opera 6')>-1) {return;}var i,j,c,eles2;var eles=document.getElementsByTagName('ol');i=eles.length;while (--i>=0) {/* 特定の<ol>要素を対象外とする場合は、この箇所に除外処理を入れます */eles2=eles[i].childNodes;j=-1; c=0x2460;//丸数字1のUCSコード。while (++j<eles2.length) {// <li>要素ノードか。if (eles2[j].nodeType!=1 && eles2[j].nodeName.toLowerCase()!='li') continue;// スタイルの調整。eles2[j].style.listStyle='none';// マーカは消す。eles2[j].style.textIndent='-1em';// マーカ代わりの文字の分だけ左にずらす。 // 丸数字を内容の前に付ける。eles2[j].innerHTML='&#'+c+';'+eles2[j].innerHTML;// 丸数字の更新。++c;if (c>=0x2473) c=0x2473;//丸数字は20まで。}}}
尚、特に意味はありませんが、今回は匿名函数を用いております。
文書内にある全ての<ol>要素ノードに対し、その子ノードで<li>要素ノードとなっている場合に、そのノードの内容となっているHTMLの前に丸数字の数値文字参照を加えると言うものです。
li となっている事を確認したうえで処理を行います。この場合、そのままだと通常のリストのマーカが表示されてしまいますので、各<li>要素ノードの style.listStyle プロパティ(CSSでのlist-styleプロパティに対応)には、'none'(マーカ及びマーカ画像なし)を入れて当該プロパティ値に強制変更します。
加えて、通常のテキストをマーカ代わりにするため、各<li>要素ノードの style.textIndent プロパティ(CSSでのtext-indentプロパティに対応)には、'-1em'(一文字分左にインデント)を入れて書き出しの位置を一文字分左にずらします。
文字参照の値の初期値には、0x2460(①のUCSコード)から始まり、<li>要素を先頭から処理するごとに 1を加えていきますが、0x2473(⑳のUCSコード)に達したらそれ以上の丸数字は無いので、値を加えないようにします。
今回挙げた処理では、<ol>要素の項目内に<p>要素などのブロックレヴェル要素が冒頭に入っている場合におかしな表示になる事があります。
これについては、要素の内容を吟味して調整する必要がありますが、そうするとコードがちょっと複雑になってしまいますので、今回は割愛させていただきました。
Copyright ©平成22年-平成24年 さいたま・しらぎくさいと 版権所有
marguerite.site@gmail.com