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を探索するときにスペースを加えて処理するのがアレな感じ.


Author

ahomuAyumu Sato

overflow, Inc.VPoE

東京資本で生きる名古屋の鳥類

Web 技術、組織開発、趣味など雑多なブログ。技術の話題は zenn にも分散して投稿しています。

Bio: aho.mu
X: @ahomu
Zenn: ahomu
GitHub: ahomu

Related

Latest

Archives

Tags

Search