javascript取得したDOM要素の使い方、HTMLCollectionとNodeList【脱jQuery】

2018年8月1日

2018年の夏、連日の猛暑日、40度を超えるような地域もあるようです。
熱中症にはお気をつけください。
皆さんこんにちは。
脱jQueryの第三弾!

今回は、第一弾の
ネイティブjavascriptでHTMLの要素を取得する!脱jQueryはじめの一歩
で取得したDOM要素、HTMLCollectionやNodeListの使い方です。

そもそもHTMLCollection、NodeListとは

どちらも配列っぽいオブジェクトで、
どちらもプロパティとして「length」が提供されています。
arrayでは無いので同じ様に扱うにはひと工夫必要な場合もあります。
HTMLCollectionはDOMに対する変更が随時反映され、
NodeListは反映されません。

HTMLCollectionにアクセスする

HTMLCollectionに直接アクセスする

HTML

  1. <ul>
  2. <li class="foo"></li>
  3. <li class="foo"></li>
  4. </ul>

javascript

  1. var htmlcollection = document.getElementsByClassName('foo');
  2. console.log(htmlcollection[0]);

arrayのように何番目かを直接指定すればそのままアクセスができます。
アクセスする要素の数と順番が把握できてる場合は有効です。

HTMLCollectionに順番にアクセスする

javascript

  1. var l = htmlcollection.length;
  2. for (var i = 0; i < l; i++) {
  3. console.log(htmlcollection[i]);
  4. }

document.forEachは使えません。
lengthで総数を取得してforでまわせば全ての要素にアクセスできます。

NodeListにアクセスする

NodeListに直接アクセスする

javascript

  1. var nodelist = document.querySelectorAll('.foo');
  2. console.log(nodelist[0]);

NodeListに順番にアクセスする

javascript

  1. var l = nodelist.length;
  2. for (var i = 0; i < l; i++) {
  3. console.log(nodelist[i]);
  4. }

IE以外でならforEach()が使えますが、
IEと互換性をもたせるなら
Array.prototype.foreachを使います。

javascript

  1. nodelist.forEach(function(e){
  2. console.log(e);
  3. });
  4. Array.prototype.forEach.call(nodelist, function (item)){
  5. console.log(item);
  6. }