(JavaScript) document.querySelectorAll()使ってますか?
2019年7月22日
皆さんこんにちは末ちゃんです。
連日の事件があまりにもショックすぎて、落ち込みます。
そのたび80年代90年代のフォークやロックシンガーが歌っていた日本の未来が顕著に姿を現してきたことを感じます。
ちなみに末ちゃんは90年代生まれです。昭和生まれではありません。
document.querySelectorAll()
さて、本題です。
JavaScriptを書かれている皆さん、document.querySelectorAll() 使ってますか
もしかしてまだ document.getElementByID() や、document.getElementsByClassName() 使ってますか?
いやいや、うちはjQuery全盛期なんだよ今!$(‘.hogehoge’) 最高!って方もいるかもしれません。
しかし今回VanillaJSでのお話しです!jQueryは置いておきます。
document.querySelectorAll() とは
このメソッドは、CSSセレクタに一致するNodeListを返してくれます。
そう、jQueryみたいに ‘.hogehoge’ や ‘#fugafuga .hoge’ みたいな書き方ができます。
また複数ある場合はカンマ区切りで指定できます。
document.querySelectorAll('p'); document.querySelectorAll('.hogehoge'); document.querySelectorAll('.hoge, .fuga'); document.querySelectorAll('.hogehoge .fuga'); document.querySelectorAll('.hogehoge > .fuga'); document.querySelectorAll('.hogehoge[data-fuga]');
みたいな感じですね!
サンプル
もしトグルコンテンツが多数並んでいて、トグルボタンをクリックしたら展開する・・・というようなのを書くとしたらこんな感じですね。
<div class="container"> <div class="item"> <button class="item__button">開く</button> <div class="item__body"> <p> hogehoge </p> </div> </div> <div class="item"> <button class="item__button">開く</button> <div class="item__body"> <p> hogehoge </p> </div> </div> </div>
.container { display: flex; } .item { flex-basis: 100px; } .item__body { display: none; } .item__body.is-open { display: block; }
const elements = document.querySelectorAll('.item'); elements.forEach(el => { const btn = el.querySelector('button'); const btnLabel = { open: '開く', close: '閉じる' }; const content = el.querySelector('.item__body'); const stateClass = 'is-open'; btn.addEventListener('click', () => { content.classList.toggle(stateClass); if (btn.innerText === btnLabel.open) { btn.innerText = btnLabel.close; } else { btn.innerText = btnLabel.open; } }); });
まとめ
このメソッドについて詳しくはMDNみてください。
公式・・・ではないですが、どんなものも公式ドキュメントは最強です!
https://developer.mozilla.org/ja/docs/Web/API/Document/querySelectorAll
え、IEでまた駄目なんでしょう?いやいや、IE8から対応してるんですよ!
babelを通せない案件でも使えます!
それではまたお会いしましょう。