特定のクラスを持つ要素の配列を取得するための最良の方法は何ですか?
document.getElementsByClassName を使用しますが、IE はサポートしていません。
だから私はジョナサン・スヌークの解決策を試しました:
function getElementsByClassName(node, classname) {
var a = [];
var re = new RegExp('(^| )'+classname+'( |$)');
var els = node.getElementsByTagName("*");
for(var i=0,j=els.length; i<j; i++)
if(re.test(els[i].className))a.push(els[i]);
return a;
}
var tabs = document.getElementsByClassName(document.body,'tab');
...しかし、IEはまだ言います:
オブジェクトはこのプロパティまたはメソッドをサポートしていません
アイデア、より良い方法、バグ修正はありますか?
jQueryやその他の「かさばるjavascript」を含むソリューションは使用しないことをお勧めします。
アップデート:
私はそれを働かせました!
@joeが述べたように、関数はのメソッドではありませんdocument
。
したがって、作業コードは次のようになります。
function getElementsByClassName(node, classname) {
var a = [];
var re = new RegExp('(^| )'+classname+'( |$)');
var els = node.getElementsByTagName("*");
for(var i=0,j=els.length; i<j; i++)
if(re.test(els[i].className))a.push(els[i]);
return a;
}
var tabs = getElementsByClassName(document.body,'tab');
...また、IE8+ のサポートのみが必要な場合は、次のように動作します。
if(!document.getElementsByClassName) {
document.getElementsByClassName = function(className) {
return this.querySelectorAll("." + className);
};
Element.prototype.getElementsByClassName = document.getElementsByClassName;
}
通常どおりに使用します。
var tabs = document.getElementsByClassName('tab');