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

KINTOテクノロジーズ株式会社

Web 技術、組織開発、趣味など雑多なブログ。技術の話題は zenn、ご飯の話題はしずかなインターネットにも分散して投稿しています。

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

Related

Latest

Archives

Tags

Search