JavaScriptDOM i zdarzenia

document.querySelectorAll()

Zwraca statyczną listę (NodeList) wszystkich elementów pasujących do selektora CSS.

Zwraca
Statyczną listę NodeList z pasującymi elementami (może być pusta).
Na tej stronie

Przykład

#
JavaScript
const lessons = document.querySelectorAll('.lesson')
console.log(lessons.length)

lessons.forEach((lesson, index) => {
  console.log(`${index + 1}. ${lesson.textContent}`)
})

const done = [...document.querySelectorAll('.lesson.done')].map((li) => li.textContent)
console.log(done)
Konsola
3
1. Wstęp
2. Znaczniki
3. Atrybuty
['Znaczniki', 'Atrybuty']

Definicja i zastosowanie

#

Metoda querySelectorAll() działa jak querySelector(), ale zwraca wszystkie pasujące elementy w kolejności, w jakiej występują w dokumencie. Wynikiem jest obiekt NodeList, który ma właściwość length, dostęp przez indeks (list[0]) i metodę forEach().

NodeList nie jest tablicą: brakuje mu metod map(), filter() czy reduce(). Zamienisz go na tablicę przez Array.from(list) albo [...list]. Jeśli nic nie pasuje, dostaniesz pustą listę o długości 0, a nie null.

Lista jest statyczna, czyli jest „zdjęciem” dokumentu z chwili wywołania. Elementy dodane później same się w niej nie pojawią, a usuwanie elementów podczas przechodzenia po liście jest bezpieczne.

Składnia

#
Składnia
document.querySelectorAll(selectors)
element.querySelectorAll(selectors)

Parametry

#
  • selectors

    napis

    Selektor CSS. Kilka selektorów oddzielasz przecinkami.

Więcej przykładów

#
Suma cen z listy
JavaScript
const items = document.querySelectorAll('li[data-price]')

const total = Array.from(items).reduce((sum, item) => sum + Number(item.dataset.price), 0)
console.log(`Razem: ${total} zł`)
Konsola
Razem: 187 zł
Lista nie aktualizuje się sama
JavaScript
const list = document.querySelector('#list')
const items = list.querySelectorAll('li')

list.append(document.createElement('li'))

console.log(items.length)
console.log(list.querySelectorAll('li').length)
console.log(list.children.length)
Konsola
2
3
3

items zapamiętało stan sprzed dodania elementu. Właściwość children to z kolei kolekcja „żywa”, która zawsze pokazuje aktualne dzieci.

Obsługa przeglądarek

#

Szeroko dostępne

Działa we wszystkich nowoczesnych przeglądarkach, także na telefonach. Możesz używać bez obaw.

  • Chrome
  • Edge
  • Firefox
  • Safari

Dobre praktyki

#
  • Potrzebujesz map() albo filter()? Zamień wynik na tablicę: [...document.querySelectorAll(".card")].
  • Nie sprawdzaj wyniku przez if (list). Pusta lista też jest obiektem, więc sprawdzaj list.length.
  • Po dodaniu nowych elementów wywołaj metodę ponownie, bo wcześniej pobrana lista się nie zmienia.

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.