PorównaniePorównania

querySelector() vs getElementById()

querySelector() przyjmuje dowolny selektor CSS i zwraca pierwszy pasujący element, a getElementById() szuka tylko po atrybucie id, ale jest prostsze.

Na tej stronie

Porównanie w tabeli

#

Przykład

#
JavaScript
const byId = document.getElementById('task-2')
const bySelector = document.querySelector('#task-2')
const byClass = document.querySelector('.task:not(.done)')

console.log(byId === bySelector)
console.log(byClass.textContent)
console.log(document.getElementById('task-3'))
Konsola
true
CSS
null

Definicja i zastosowanie

#

Obie metody zwracają pierwszy pasujący element albo null, gdy nic nie znajdą, i obie czytają istniejący dokument bez tworzenia nowych elementów. Różni je to, czego szukają. querySelector() przyjmuje dowolny selektor CSS, taki jak ".card", "nav a" czy "input[type=email]". getElementById() przyjmuje samą wartość atrybutu id, bez znaku #, bo to nie jest selektor CSS.

querySelector() można wywołać nie tylko na document, ale też na dowolnym elemencie, i wtedy szuka tylko w jego wnętrzu. getElementById() działa jedynie na document. Wyszukiwanie po id jest przy tym najszybszą operacją w DOM, bo przeglądarka może sięgnąć po element wprost, bez analizowania selektora.

Masz prosty, znany z góry identyfikator i szukasz w całym dokumencie? getElementById() jest prostsze i szybsze. Potrzebujesz klasy, atrybutu, zagnieżdżonego selektora albo szukania wewnątrz konkretnego elementu? Sięgnij po querySelector().

Składnia

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

document.getElementById(id)

Więcej przykładów

#
getElementById() działa tylko na document
JavaScript
const card = document.querySelector('#html-course')
const price = card.querySelector('.price')

console.log(price.textContent)
console.log(typeof card.getElementById)
Konsola
49 zł
undefined

Element nie ma metody getElementById(), tylko document ją ma. Szukając wewnątrz konkretnego elementu, zawsze używaj querySelector() albo querySelectorAll().

Obie metody rozróżniają wielkość liter
JavaScript
console.log(document.getElementById('Submit-Btn')?.textContent)
console.log(document.getElementById('submit-btn'))
console.log(document.querySelector('#Submit-Btn')?.textContent)
Konsola
Wyślij
null
Wyślij

Dobre praktyki

#
  • Masz prosty, unikalny id? getElementById() jest najszybszym i najbardziej czytelnym rozwiązaniem.
  • Potrzebujesz przeszukać tylko wnętrze konkretnego elementu? Wywołaj querySelector() na tym elemencie, nie na document. getElementById() tak się nie da.
  • Sprawdzaj wynik przed użyciem albo używaj ?.. Obie metody zwracają null, gdy nic nie znajdą.

Powiązane hasła

#

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