HTML
1<ul> 2 <li></li> 3 <li></li> 4 <li></li> 5 <li></li> 6 <li></li> 7</ul>
JavaScript
1const liNode = document.querySelectorAll("li")
JavaScriptで li を複数一気の取得する場合どんなコードがありますか?
※[]でチマチマやるの以外で
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/14 14:59
回答2件
0
ベストアンサー
JavaScriptで li を複数一気の取得する場合どんなコードがありますか?
ご質問に示されている document.querySelectorAll("li")
が、現行仕様では最もダイレクトな方法と思います。
返却値は NodeList
になりますので、近いコードは、親要素の childNodes
プロパティを用いた以下のコードになります。
※childNodes
プロパティは、コメントノードやテキストノード(ホワイトスペース)も含みますので厳密には異なります。
javascript
1const ulChildNodes = document.querySelector("ul").childNodes;
また、返却値が HTMLCollection
でも良いなら、
javascript
1var liElements = document.querySelector("ul").children;
MDN)
以下、代替コードで ul
を起点とする考え方を示した理由です。
チマチマやる
修正依頼欄の addEventListener
より要件を把握しました(できれば、ご質問にも記載されたほうが良いでしょう)。
個々の要素にイベント処理を定義するため、同様な要素を走査するのは正直面倒です。
「EventListener」でclickしたら処理を行う、みたいにしたい(修正依頼コメント欄より
バブリングを活用する
javascript
1let ulListener; // removeEventListener() 用 2document.querySelector("ul").addEventListener("click", ulListener = (evt) => { 3 console.log( evt.curentTarget ); // <ul> 要素 : イベント定義した要素 4 console.log( evt.curentTarget.children ); // <li> 要素の HTMLCollection 5 console.log( evt.target ); //<ul> 以下にある要素 : イベント発火した要素 6 console.log( evt.target.closest("li") ); // <li> 要素 7 8 /* 用例 : li要素の active クラス付け替え:全て除去後、必要な要素にのみ付与する 9 let 10 ul = evt.currentTarget, 11 li = evt.target.closest("li") // クリックしたListItem 12 ; 13 [...ul.children].forEach( li => li.classList.remove("active") ) 14 li.classList.add("active") 15 */ 16 17});
イベントリスナが登録された要素数が ul.children.length
ではなく、 ul の 1
に抑制できる特徴もあります。
また、ul にイベントを定義しておくと、li
要素を追加したり、除去したりしても、その都度、li
要素にイベントリスナを定義せずに済みます。
イベントリスナに渡される Event
(コード内ではevt
)で伝搬される情報を利用するのがポイントです。
MDN)
投稿2020/09/14 21:20
総合スコア5434
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
基本的に、
[]でチマチマやる
しかありませんが、工夫すれば、親要素に対してイベント付与をする、とすれば一応一気に指定できます。
ただし、
イベントを実行した時の対象のli
を特定するには、
[]でチマチマやるより、遥かに面倒になります。
なので、通常は、配列メソッドを使います。
javascript
1// クリックイベントを付与する例 2 3const liNode = document.querySelectorAll("li"); 4 5liNode.forEach( el => { 6 el.addEventListener('click', () => { 7 // 処理 8 }); 9}); 10 11// NodeListにforEachがない場合は、下記 12[].forEach.call(liNode, function(el){ 13 el.addEventListener('click', () => { 14 // 処理 15 }); 16});
投稿2020/09/14 15:36
編集2020/09/14 15:38総合スコア9555
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。