素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: twitter: @javascripter にどうぞ。

getElementsByClassNameの代替

var getElementsByClassName=document.getElementsByClassName?
function(className,root){
    return Array.slice((root||document).getElementsByClassName(className));
}:
function(className,root){
  return className.split(/\s/).reduce(function(matchedElements,className){
    var classNameRegEx=new RegExp('(?:^|\\s)'+className+'(?:\\s|$)');
    return Array.filter(matchedElements,
      function(i){return i.className.search(classNameRegEx)!=-1}
    );
  },(root||document).getElementsByTagName('*'));
}

getElementsByClassName('body');

OperaSafariではdocument.getElementsByClassNameはないと思っていたけれどどちらもネイティブでサポートされていた。このコードは必要ないか。