<ul>
    <li>おにぎり</li>
    <li>ラーメン</li>
    <li>うどん</li>
</ul>
const liElements = document.querySelectorAll("li");  // liセレクターに一致するすべての要素を取得
console.log(liElements); // NodeList(3) [li, li, li]

// 配列に似た構造のため length プロパティを使用可能
let liElementsLength = liElements.length;

// ループ処理で要素にアクセス
for (let i = 0; i < liElementsLength; i++) {
    console.log(liElements[i].textContent);
}
// 出力: "おにぎり" "ラーメン" "うどん"
// HTMLドキュメント全体から
document.querySelectorAll(selectors)

// 特定の要素オブジェクト内から
element.querySelectorAll(selectors)
let matches = document.querySelectorAll("p"); // HTMLドキュメントから要素を検索
<div class="container">
    <p>子要素です。</p>
</div>
let container = document.querySelector(".container"); // 特定の要素オブジェクトです。

let matches = container.querySelectorAll("p"); // 特定の要素オブジェクト内で要素を検索
/* let matches = document.querySelectorAll(".container p"); と同じ戻り値です。 */
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="UTF-8">
        <title>querySelectorAll()関数</title>     
    </head>
    <body>
        <ul>
            <li>おにぎり</li>
            <li>ラーメン</li>
            <li>うどん</li>
        </ul>
        <script src="queryselectorall.js"></script>
    </body>
</html>
const liElements = document.querySelectorAll("li");  // liセレクターに一致するすべての要素を取得
console.log(liElements); // NodeList(3) [li, li, li]

/*
 * このリストは配列に似た構造を持っています。
 * このリスト内の要素は、ループ処理を通じて特定の操作を実行できます。
*/

/* 方法 1 - for...of 文を適用 */
for (const liElement of liElements) {
    console.log(liElement.textContent);
}
// 出力: "おにぎり" "ラーメン" "うどん"

/* 方法 2 - for 文を適用 */
for (let i = 0; i < liElements.length; i++) { // length プロパティを使用可能
    console.log(liElements[i].textContent);
}
// 出力: "おにぎり" "ラーメン" "うどん"

/* 方法 3 - forEach() 関数を適用 */
liElements.forEach(li => { // 配列に似ていますが forEach() 関数を適用可能
    console.log(li.textContent);
});
// 出力: "おにぎり" "ラーメン" "うどん"
<p class="highlight">これらの要素のスタイルを変更します。</p>
const highlightedElements = document.querySelectorAll(".highlight");
const elementsLength = highlightedElements.length;

for (let i = 0; i < elementsLength; i++) {
    highlightedElements[i].style.backgroundColor = "yellow";
    highlightedElements[i].style.color = "green";
}
<ul id="my-list">
    <li>項目 1</li>
    <li>項目 2</li>
    <li>項目 3</li>
</ul>
const listItems = document.querySelectorAll("#my-list li");
const itemsLength = listItems.length;

for (let i = 0; i < itemsLength; i++) {
    console.log("項目 " + (i + 1) + ": " + listItems[i].textContent);
}
<ul id="my-links">
    <li><a href="#">リンク 1</a></li>
    <li><a href="#">リンク 2</a></li>
</ul>
const linkList = document.querySelectorAll("#my-links a");
const linksLength = linkList.length;

for (let i = 0; i < linksLength; i++) {
    linkList[i].addEventListener("click", function(event) {
        event.preventDefault();
        alert("リンクがクリックされました!");
    });
}
<!DOCTYPE html>
<html lang="ja"> 
    <head>
        <title>querySelectorAll()の例</title>
    </head>
    <body>
        <div id="myElement">この要素を選択できます。</div>
        <script>
            const nonExistentElement = document.querySelectorAll("#nonExistentElement");
            
            if (nonExistentElement.length === 0) { // lengthプロパティでNodeListオブジェクトの長さにアクセス可能
                console.log("一致する要素はありません。");
            } else {
                console.log("一致する要素が見つかりました。");
            }
        </script>
    </body>
</html>
<!DOCTYPE html>
<html lang="ja"> 
    <head>
        <meta charset="UTF-8">
        <title>NodeList</title>     
    </head>
    <body>
        <ul id="list">
            <li>おにぎり</li> 
            <li>ラーメン</li> 
            <li>うどん</li> 
        </ul>
        <p><li> 要素の数: <strong id="li-length-val">3</strong></p>
        <button type="button" id="addButton">新しいメニューを追加</button>
        <script src="none-live.js"></script>
    </body>
</html>
// <li>要素を取得
const liElements = document.querySelectorAll("li");

// ボタンクリック時に新しい<li>要素を追加
document.getElementById("addButton").addEventListener("click", () => {
    const newLi = document.createElement("li");
    newLi.textContent = '新しいメニュー';

    // 新しい<li>要素を<ul>に追加
    document.getElementById("list").appendChild(newLi);

    // <li>要素の数をリアルタイムで確認
    const liElementsLength = liElements.length; // すでに宣言したliElementsのlengthはリアルタイムでは反映されない
    document.getElementById("li-length-val").textContent = liElementsLength;
});
ブラウザでの実際の表示 ボタンをクリックしてみてください!