class属性の変更でスタイルを変える

class属性を変更する例

エレメントノードにはstyle属性もありますから、簡単な変更ならこれでもできます。しかし、あらかじめ classごとに見栄えを指定しておいて classの値を変化させる方が簡単で応用を広げることが出来ます。

次の文は虫の名前がclass="mushi"というクラスのspanに、虫の音がclass="koe"というクラスのspanに指定されています。あらかじめ koe は青緑色に指定されてます。mushiは特に設定はありません。

span.koe   {color:#009999; font-weight:bold;}
span.medatsu1 {color:#ff0000;background:#ffcccc;}
span.medatsu2 {background:#ccffff;}

いろいろな虫がいます。特徴的ななき方をするものは聞き分けることは簡単です。ウマオイスイッチョンとなきます。クツワムシは、歌に有名なようにガチャガチャと聞こえます。キリギリスもわかりやすくチョン・ギースと聞こえます。昼間になくので見つけやすいこともあるでしょう。

class="mushi"だけclass="medatsu1"に class="koe"だけclass="medatsu2"に

function changeclass1(){
    var i;
    var elms = document.getElementsByTagName("span");
    for (i=0;elms.length>i;i++){
        if (elms[i].getAttribute("class")=="mushi"){
            elms[i].setAttribute("class","medatsu1");
        }
    }
}
function changeclass2(){
    var i;
    var elms = document.getElementsByTagName("span");
    for (i=0;elms.length>i;i++){
        if (elms[i].getAttribute("class")=="koe"){
            elms[i].setAttribute("class","medatsu2");
            //elms[i].className = "medatsu2";
        }
    }
}

span.koe にもともと設定されていた color:#009999 と font-weight:bold; がなくなってしまうことに注意してください。

ただしブラウザが読み込んだページに対しての書き換えで, もともとのファイルのデータを書き換えるわけではありません。

class属性を作りながらスタイルを適用する

属性ノードの値を指定するとき、属性ノードがもともとあれば変更され, なければ新しく作られます。

下にある表はclass指定をまったくしていません。でも tr タグを数えて一つおきにclass属性を設定します。そのクラスに対してcssで背景色をつけるように設定してありますので、1行おきに色がついて見やすくなります。普通はページ表示と同時に実行するようにしますが、ここでは動作が分かるように手動で色をつけます。

1行おきにclass="medatsu2"を設定する

function trodd(){
    var i;
    var elms = document.getElementsByTagName("tr");
    for (i=0;elms.length>i;i=i+2){
            elms[i].setAttribute("class","medatsu2");
    }
}

丸付数字はUTF-8で作るhtmlでは機種依存文字ではありません。メールではISO-2022-jpなので機種依存文字になります。

数値参照UnicodeUTF-8JISX0213文字Name
U+2460E291A03-2D21CIRCLED DIGIT ONE
U+2461E291A13-2D22CIRCLED DIGIT TWO
U+2462E291A23-2D23CIRCLED DIGIT THREE
U+2463E291A33-2D24CIRCLED DIGIT FOUR
U+2464E291A43-2D25CIRCLED DIGIT FIVE
U+2465E291A53-2D26CIRCLED DIGIT SIX
U+2466E291A63-2D27CIRCLED DIGIT SEVEN
U+2467E291A73-2D28CIRCLED DIGIT EIGHT
U+2468E291A83-2D29CIRCLED DIGIT NINE
U+2469E291A93-2D2ACIRCLED NUMBER TEN
U+246AE291AA3-2D2BCIRCLED NUMBER ELEVEN
U+246BE291AB3-2D2CCIRCLED NUMBER TWELVE
U+246CE291AC3-2D2DCIRCLED NUMBER THIRTEEN
U+246DE291AD3-2D2ECIRCLED NUMBER FOURTEEN
U+246EE291AE3-2D2FCIRCLED NUMBER FIFTEEN
U+246FE291AF3-2D30CIRCLED NUMBER SIXTEEN
U+2470E291B03-2D31CIRCLED NUMBER SEVENTEEN
U+2471E291B13-2D32CIRCLED NUMBER EIGHTEEN
U+2472E291B23-2D33CIRCLED NUMBER NINETEEN
U+2473E291B33-2D34CIRCLED NUMBER TWENTY
U+3251E389913-2841CIRCLED NUMBER TWENTY ONE
U+3252E389923-2842CIRCLED NUMBER TWENTY TWO
U+3253E389933-2843CIRCLED NUMBER TWENTY THREE
U+3254E389943-2844CIRCLED NUMBER TWENTY FOUR
U+3255E389953-2845CIRCLED NUMBER TWENTY FIVE
U+3256E389963-2846CIRCLED NUMBER TWENTY SIX
U+3257E389973-2847CIRCLED NUMBER TWENTY SEVEN
U+3258E389983-2848CIRCLED NUMBER TWENTY EIGHT
U+3259E389993-2849CIRCLED NUMBER TWENTY NINE
U+325AE3899A3-284ACIRCLED NUMBER THIRTY
U+325BE3899B3-284BCIRCLED NUMBER THIRTY ONE
U+325CE3899C3-284CCIRCLED NUMBER THIRTY TWO
U+325DE3899D3-284DCIRCLED NUMBER THIRTY THREE
U+325EE3899E3-284ECIRCLED NUMBER THIRTY FOUR
U+325FE3899F3-284FCIRCLED NUMBER THIRTY FIVE
U+32B1E38AB13-2850CIRCLED NUMBER THIRTY SIX
U+32B2E38AB23-2851CIRCLED NUMBER THIRTY SEVEN
U+32B3E38AB33-2852CIRCLED NUMBER THIRTY EIGHT
U+32B4E38AB43-2853CIRCLED NUMBER THIRTY NINE
U+32B5E38AB53-2854CIRCLED NUMBER FORTY
U+32B6E38AB63-2855CIRCLED NUMBER FORTY ONE
U+32B7E38AB73-2856CIRCLED NUMBER FORTY TWO
U+32B8E38AB83-2857CIRCLED NUMBER FORTY THREE
U+32B9E38AB93-2858CIRCLED NUMBER FORTY FOUR
U+32BAE38ABA3-2859CIRCLED NUMBER FORTY FIVE
U+32BBE38ABB3-285ACIRCLED NUMBER FORTY SIX
U+32BCE38ABC3-285BCIRCLED NUMBER FORTY SEVEN
U+32BDE38ABD3-285CCIRCLED NUMBER FORTY EIGHT
U+32BEE38ABE3-285DCIRCLED NUMBER FORTY NINE
U+32BFE38ABF3-285ECIRCLED NUMBER FIFTY

課題 ファイル名 xclass.html

ボタンをクリックまたはマウスが重なることで、classの値が変化して文字の色や背景色など見栄えが変化する仕組みのあるページをつくりなさい。

index.htmlからは「classの変化」という名前のリンクから行けるようにすること。

理解できない場合は、DOMの課題に共通の作成例を参考にしなさい。


ウェブページ(Jan.2011)
聖愛中学高等学校
http://www.seiai.ed.jp/
Dec.2009 初稿