インターネットエクスプローラ 7.0まででも注釈の記述に用いた<ul>要素の各項目(<li>要素)の冒頭に※印が打てるようにするためのスクリプトを解説します。
文章に注釈を添える際、どのようにマークアップするかにも依りますが、最も妥当な方法は特別なクラス名を与えた<ul>要素としてしまうと言うのが考えられます。
CSS第二水準を正しく実装している環境であれば、この注釈リストの各項目の冒頭に※印(日本語の場合)を与える事で注釈である事が依り明確に出来ますが、インターネットエクスプローラ 7.0までは正式には第二水準非対応のためこのような事が出来ず、リストのマーカに※印の画像を使う事で代用するしかありません。
しかし、DOMを活用すれば、インターネットエクスプローラ 7.0でもテキストの※印をマーカに使う事が出来ます。
インターネットエクスプローラは、アクティヴスクリプトを無効に出来るようになっております。
従って、セキュリティ上の理由からスクリプトを無効にしている場合であっても、CSSに依り適切なスタイルを与えておく必要があります。
ただ、普通に順不同リストとしてのスタイルで表示させておけば、普通の段落とは異なるブロックであると視認する事は可能と思われますので、スクリプトを無効にしたときのスタイルを考えるのが面倒なら普通の順不同リストと同じスタイルで表示させれば良いでしょう。
ここでは、以下のようなスタイルが与えられているものと仮定します。
ul.notes>li {list-style-type: none;/* オペラの一部ヴァージョンでマーカを消すのに必要。*/display: block;margin-left: 0;text-indent: -1em;}ul.notes>li:before {display: inline;content: "\203b";/* content: "※"; では一部で文字化けする事がある。*/}// IE 7.0対策。*+html ul.notes>li {list-style-type: disc;display: list-item;text-indent: 0;}
スクリプトは、HTML文書とは別のファイルで保存し、注釈リストを含むHTML文書では当該スクリプトを<head>要素内に<script>要素で埋め込むように記述します。
スクリプトはHTML文書の読込が完了すると自動的に処理スクリプトを起動して、インターネットエクスプローラ 7.0でも注釈用のリストの各項目冒頭に※印がテキストで打たれるようになります。
以下のようなスクリプトを書いて、それをHTML文書からリンクすれば、アクティヴスクリプトを有効にしたインターネットエクスプローラでは、全ての<q>要素の内容にかぎ括弧が与えられて表示される事になります。
onload4setStyle=window.onload;window.onload=setStyle;function setStyle() {if (onload4setStyle) onload4setStyle();// 対応出来ない環境を弾く。if (!document.getElementById ||navigator.userAgent.indexOf('Opera/6')>-1 ||navigator.userAgent.indexOf('Opera 6')>-1) {return;}// **** 全ブラウザ対象の処理 **** // **** IE 7.0までのみ対象の処理 ****if (!document.all || window.opera ||navigator.userAgent.indexOf('Trident/')>-1 &&navigator.userAgent.indexOf('MSIE 7.')<0) return;// 注釈リストのスタイル補正。eles=document.getElementsByTagName('ul');var i=-1;while (++i<eles.length) {k=' '+(eles[i].getAttribute('className') || '')+' ';if (k.indexOf(' '+noteClass+' ')>-1) {eles[i].setAttribute('className',k.split(' '+noteClass+' ').join(' '));var eles2=eles[i].childNodes;k=-1;while (++k<eles2.length) {a=eles2[k].innerHTML;eles2[k].innerHTML='※'+a;eles2[k].style.textIndent='-1em';eles2[k].style.listStyleImage='none';eles2[k].style.listStyleType='none';}continue;}}// 注釈リストのスタイル補正処理はここまで。}
ここで、五行目の var noteClass='notes'; の右辺は注釈リストに与えたクラス名を指定します。
<ul class="notes">要素としてマークアップしている場合を仮定しているので、右辺は 'notes' となります。文書内にある全ての<ul>要素ノードのうち、注釈リストに与えたクラス名を持つものを対象に、その直下の要素(原則として>li>要素)の冒頭に※印を与えると言うものです。
このとき、※印は通常のテキストとして附与されるため、text-indentプロパティに-1emを与える事で一文字分左にずらしております。
尚、<ul>要素に与えたスタイルのうち、注釈リストに与えたクラス名を取り除いたクラス名を改めて与えるようにしておりますが、これは
から、このような処理を行っております。
今回挙げた処理では、注釈リストの項目に<p>要素などのブロックレヴェル要素が冒頭に入っている場合におかしな表示になる事があります。
これについては、要素の内容を吟味して調整する必要がありますが、そうするとコードがちょっと複雑になってしまいますので、今回は割愛させていただきました。
Copyright ©平成21年-平成24年 さいたま・しらぎくさいと 版権所有
marguerite.site@gmail.com