getElementsByClassNameの代替関数

当たり障りなく

うーん,なんかこうならざるを得ない感じでおもしろくないけどメモがてら.documentからやったとき,絶対ひどいパフォーマンスだよね.てかitem使わないしなくても・・・.

function AdaptiveGetElementsByClassName(clazz) {
  var elems = this.getElementsByTagName('*'),
    evClass = ' '+clazz+' ',
          i = 0,
          e = null,
         rv = [];

  while ( e = elems[i] ) {
    if ( e.nodeType === Node.ELEMENT_NODE && (' '+e.className+' ').indexOf(evClass) !== -1 ) {
      rv.push(e);
    }
    i++;
  }
  rv.item = function(i) {
    return this[i];
  };
  return rv;
}

またセレクタをガッツリ実装するときに,細かい処理を速度的に詰めていこう.あ,Node.ELEMENT_NODEは関数の外で補完してる想定で.

addClass的なソレもそうだけど,classを探索するときにスペースを加えて処理するのがアレな感じ.