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名を指定する。

 

 

カテゴリ

この記事のコメント

コメントはないです。

コメントを残す

メールアドレスが公開されることはありません。