JS基礎編--HTML DOM classList属性
ページDOMの各ノードにはclassListオブジェクトがあり、プログラマは中の方法でノード上のCSSクラスを追加、削除、修正することができます.classListを使用すると、プログラマはノードにCSSクラスが付与されているかどうかを判断することもできます.
要素に複数のクラスを追加するには、次の手順に従います.
removeメソッドを使用すると、単一のCSSクラスを削除できます.
複数のクラスを削除:
この方法の役割はmyDiv要素にこのCSSクラスがない場合、このCSSクラスを追加することです.myDiv要素にすでにこのCSSクラスがある場合は、削除します.反転操作です.
CSSクラスが含まれているかどうかを確認します.
結果は
クラスリストのクラスの数を返します.要素のクラス名を表示します.
取得要素のすべてのクラス名を取得するには、次の手順に従います.
要素内のクラス名のインデックス値を返します.インデックス値は0から開始します.インデックス値が区間範囲外の場合null取得要素の最初のクラス名が返されます(インデックスは0).
しかし、IE 9とIE 9の以前のバージョンではこの属性はサポートされていません.次のコードはこの残念さを補うことができます.(ネットユーザーコードから)
ここでヒントとして、他のタイプの値はブール値の対応関係に変換され、対応関係表は次のようになります.
その他のタイプ値
変換されたブール値
ブール値
変換しない
数値
文字列
空の文字列
オブジェクト
すべて
Objectを知りたいdefinePropertyでは、次の2つの記事を参照できます.
『JS基礎編--JS applyの巧みな使い方とObject.definePropertyへの拡張の使用』
『JS基礎編--JSにおける列挙可能属性と列挙不可属性及び拡張』
クラスの追加(add)
document.getElementById("myDIV").classList.add("mystyle");
要素に複数のクラスを追加するには、次の手順に従います.
document.getElementById("myDIV").classList.add("mystyle", "anotherClass", "thirdClass");
クラスの削除(remove)
removeメソッドを使用すると、単一のCSSクラスを削除できます.
document.getElementById("myDIV").classList.remove("mystyle");
複数のクラスを削除:
document.getElementById("myDIV").classList.remove("mystyle", "anotherClass", "thirdClass");
クラスの切り替え(toggle)
この方法の役割はmyDiv要素にこのCSSクラスがない場合、このCSSクラスを追加することです.myDiv要素にすでにこのCSSクラスがある場合は、削除します.反転操作です.
document.getElementById("myDIV").classList.toggle("newClassName");
myDiv.classList.toggle('myCssClass'); //
myDiv.classList.toggle('myCssClass'); //
クラスが存在するかどうか(contains)
CSSクラスが含まれているかどうかを確認します.
var x = document.getElementById("myDIV").classList.contains("mystyle");
結果は
true
またはfalse
であった.lengthプロパティ
クラスリストのクラスの数を返します.要素のクラス名を表示します.
var x = document.getElementById("myDIV").classList.length; //3
取得要素のすべてのクラス名を取得するには、次の手順に従います.
I am a DIV element
var x = document.getElementById("myDIV").classList;
item(index)
要素内のクラス名のインデックス値を返します.インデックス値は0から開始します.インデックス値が区間範囲外の場合null取得要素の最初のクラス名が返されます(インデックスは0).
var x = document.getElementById("myDIV").classList.item(0); //mystyle
ブラウザのサポート
しかし、IE 9とIE 9の以前のバージョンではこの属性はサポートされていません.次のコードはこの残念さを補うことができます.(ネットユーザーコードから)
if (!("classList" in document.documentElement)) {
Object.defineProperty(HTMLElement.prototype, 'classList', {
get: function() {
var self = this;
function update(fn) {
return function(value) {
var classes = self.className.split(/\s+/g),
index = classes.indexOf(value);
fn(classes, index, value);
self.className = classes.join(" ");
}
}
return {
add: update(function(classes, index, value) {
if (!~index) classes.push(value);
}),
remove: update(function(classes, index) {
if (~index) classes.splice(index, 1);
}),
toggle: update(function(classes, index, value) {
if (~index)
classes.splice(index, 1);
else
classes.push(value);
}),
contains: function(value) {
return !!~self.className.split(/\s+/g).indexOf(value);
},
item: function(i) {
return self.className.split(/\s+/g)[i] || null;
}
};
}
});
}
ここでヒントとして、他のタイプの値はブール値の対応関係に変換され、対応関係表は次のようになります.
その他のタイプ値
変換されたブール値
undefined
false
null
false
ブール値
変換しない
数値
0,NaN
はfalse
に変換され、他の数値タイプはtrue
に変換されます.文字列
空の文字列
''
のみがfalse
に変換され、その他はtrue
に変換されます.オブジェクト
すべて
true
に変換Objectを知りたいdefinePropertyでは、次の2つの記事を参照できます.
『JS基礎編--JS applyの巧みな使い方とObject.definePropertyへの拡張の使用』
『JS基礎編--JSにおける列挙可能属性と列挙不可属性及び拡張』