getElementsByClassNameが使えない
jQueryなんぞ使わず、JavaScriptだけでDOMのクラスの取得をしたかったんですがね。
どうせgetElementByIDと同じような動きで、classはidと違って複数あるわけだから、配列みたいな感じになるんだろうなー程度の軽い気持ちで使ったのが、落とし穴だった。
※この記事は2017/10/27に修正しました。(引数の書き方が気持ち悪かったのと、一部条件が少し間違ってたので。)
IE6,7,8で動かない。
IE6は思い入れはあるのでともかく、IE7,8はクソ喰らえばいい。
腹がたったのでその場のノリで、ネットの情報を参考にしつつユーザー定義関数で無理やり使えるようにスクリプト作成しました。
function getElementsClass(class, pid){
var keys = (class == null) ? 'default' : class;
var nodes = (pid == null) ? document : document.getElementById(pid);
var ua = window.navigator.userAgent.toLowerCase(), av = window.navigator.appVersion.toLowerCase(); var obj = [], r = [];
if(ua.indexOf('msie') != -1 && (av.indexOf('msie 6.') != -1 || av.indexOf('msie 7.') != -1 || av.indexOf('msie 8.') != -1 )){
var elem = nodes.getElementsByTagName('*');
for(var i=0, j=0; i < elem.length; i++){
if(elem[i].className == keys){
obj[j] = elem[i];
j++;
}
}
}else{
obj = nodes.getElementsByClassName(keys);
}
r = obj;
return r;
}
IE6~8では配列に無理やりDOMを格納。
そうでない場合は、普通のgetElementsByClassNameで配列にDOMを格納。
最後に値を返す。
至って単純。
あとはこいつを、
window.onload = function(){
var classObjects = getElementsClass('取得したいクラス名');
}
とでもやってあげれば、IE6~8だろうがモダンブラウザでも同じDOMの内容が取得可能となる。
クラスに対する親のIDを指定してあげたい場合は、第二引数でID名を指定する。
