<ul>
    <li>Pizza</li>
    <li>Burger</li>
    <li>Pasta</li>
</ul>
const liElements = document.querySelectorAll("li");  // Selects all <li> elements
console.log(liElements); // NodeList(3) [li, li, li]

// Can use the length property since it's array-like
let liElementsLength = liElements.length;

// Access each element through iteration
for (let i = 0; i < liElementsLength; i++) {
    console.log(liElements[i].textContent);
}
// Output: "Pizza" "Burger" "Pasta"
// Within the entire HTML document
document.querySelectorAll(selectors)

// Within a specific element
element.querySelectorAll(selectors)
const matches = document.querySelectorAll("p"); // Search across the entire document
<div class="container">
    <p>This is a child element.</p>
</div>
const container = document.querySelector(".container"); // A specific element

const matches = container.querySelectorAll("p"); // Search within the element
/* Equivalent to:
   document.querySelectorAll(".container p");
*/
<ul>
    <li>Pizza</li>
    <li>Burger</li>
    <li>Pasta</li>
</ul>
const liElements = document.querySelectorAll("li"); // Select all <li> elements

console.log(liElements); // NodeList(3) [li, li, li]

/*
 * The NodeList is array-like and iterable.
 * You can loop through its elements in several ways.
 */

/* Method 1 – using for...of */
for (const li of liElements) {
    console.log(li.textContent);
}
// Output: "Pizza" "Burger" "Pasta"

/* Method 2 – using a standard for loop */
for (let i = 0; i < liElements.length; i++) {
    console.log(liElements[i].textContent);
}
// Output: "Pizza" "Burger" "Pasta"

/* Method 3 – using forEach() */
liElements.forEach(li => {
    console.log(li.textContent);
});
// Output: "Pizza" "Burger" "Pasta"
<p class="highlight">These elements will have their styles changed.</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>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
</ul>
const listItems = document.querySelectorAll("#my-list li");
const itemsLength = listItems.length;

for (let i = 0; i < itemsLength; i++) {
    console.log("Item " + (i + 1) + ": " + listItems[i].textContent);
}
<ul id="my-links">
    <li><a href="#">Link 1</a></li>
    <li><a href="#">Link 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("Link clicked!");
    });
}
<!DOCTYPE html>
<html lang="en">
    <head>
        <title>querySelectorAll() Example</title>
    </head>
    <body>
        <div id="myElement">This element can be selected.</div>
        <script>
            const nonExistentElement = document.querySelectorAll("#nonExistentElement");
    
            if (nonExistentElement.length === 0) {
                console.log("No matching elements found.");
            } else {
                console.log("Matching elements found.");
            }
        </script>
    </body>
</html>
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>NodeList</title>     
    </head>
    <body>
        <ul id="list">
            <li>Pizza</li>
            <li>Burger</li>
            <li>Pasta</li>
        </ul>
        <p>Number of li elements: <strong id="li-length-val">3</strong></p>
        <button type="button" id="addButton">Add New Item</button>
        <script src="none-live.js"></script>
    </body>
</html>
const liElements = document.querySelectorAll("li");

document.getElementById("addButton").addEventListener("click", () => {
    const newLi = document.createElement("li");
    newLi.textContent = 'New Item';

    document.getElementById("list").appendChild(newLi);

    // This length remains unchanged because the NodeList is static
    const liElementsLength = liElements.length;
    document.getElementById("li-length-val").textContent = liElementsLength;
});
Live Demo