JavaScript - selektory DOM
Opublikowano sob 02 maja 2020 w javascript • 2 min read
DOM - document object model
Selektory pojedynczych elementów
| selektor | funkcja | przykładowe zastosowanie |
|---|---|---|
document.getElementById() |
zwraca element w podanym Id | document.getElementById('button-4') |
document.querySelector() |
zwraca pierwszy element spełniający podany warunek/ wpisany składnią znaną z CSS | document.getElementById('#button-4') |
:::Istnieje możliwość łączenia selektorów z atrybutami :::
Przykładowe zastosowanie
document.getElementById('button-4').className // zwraca klasę
const button = document.getElementById('button-4')
button.style.background = 'red' // zmienia tło na czerwone
button.style.display = 'none' - element znika
button.style.display = " " - element się pojawia
button.textContent = "tekst" - wpisuje treść
button.innerText = "tekst" - wpisuje treść
button.innerHTML = "<span style="color: red">tekst</span>" - dodaje html
document.querySelector('#button') - pierwszy element gdzie id='button'
document.querySelector('.button') - pierwszy element gdzie class='button'
document.querySelector('.button .name') - pierwszy element gdzie class='name' będący dzieckiem elementu gdzie class='button'
document.querySelector('h1') - pierwszy element z tagiem h1
document.querySelector('h1 span') - pierwszy dziecko span elementu h1
document.querySelector('li:last-child') - pierwszy element typu li będący ostatnim dzieckiem
document.querySelector('li:nth-child(odd)').style.color = "red" - pierwszy element typu li będzie czerwony (ponieważ pierwszy jest nieparzysty)
document.querySelector('[href = "google.com"]') - pierwszy element z atrybutem href
Selektory wielu elementów
Zwracają kolekcję HTML (HTML Collection) albo node-list
| selektor | funkcja | przykładowe zastosowanie |
|---|---|---|
document.getElementsByClassName() |
zwraca wiele elementów na podstawie podanej nazwy klasy w postaci kolekcji html | document.getElementsByClassName('buttons') |
document.getElementsByTagName() |
zwraca wiele elementów na podstawie podanego tagu w postaci kolekcji html | document.getElementsTagName('li') |
document.querySelectorAll() |
zwraca wszystkie element spełniający podany warunek/składnia CSS/ zwraca NodeList | document.querySelectorAll('ul.list li.list-item') |
document.querySelectorAll() zwraca NodeList a nie HTML collection
::: NodeList nie wymaga konwersji ponieważ ma metodę forEach() :::
w innym przypadku wymagana jest konwersja aby móc dokonać iteracji...
::: Konwersja HTML collection :::
Wykorzystujące metodę przypisaną do tablic
let arr = Array.from(document.getElementsByTagName('li'))
Albo poprzez użycie tzw spread operatora
let arr = [...document.getElementsByTagName('li')]
arr.forEach(function(elem, index){
console.log(index, elem.className);
});
document.querySelectorAll('li:nth-child(odd)') - co 2. element listy, każde parzyste dziecko będące li - aby nadać styl należy użyć pętli for lub forEach
const oddItem = document.querySelectorAll('li:nth-child(odd)')
oddItem.forEach(function(elem){
elem.style.background = 'red'
});
Lub (działa również dla kolekcji html/ HTML collection)
for(let i = 0; i < oddItem.length; i++ ) {
oddItem[i].style.background = 'red'
}
Przykładowe zastosowanie
document.getElementsByClassName('buttons')[3].style.color= 'red' - zmieni 4 zwrócony element na czerwono
'document.querySelector('ul').getElementsByClassName('list-item') - zwróć wszystkie elementy mające klasę list-item będące się w elemencie ul
Przechodzenie pomiędzy elementami DOM
.childNodes - nodeList wszystkich węzłów "dzieci" wybranego elementu
Przykładowe zastosowanie
document.querySelector('ul').childNodes // wszystkie węzły dzieci elementu ul (np. li oraz text)
document.querySelector('ul').childNodes[0].nodeName // >> #text
document.querySelector('ul').childNodes[0].nodeType // >> 3
document.querySelector('ul').childNodes[1].nodeType // >> 1
1 - Element 3 - Text node 8 - Comment 9 - Document itself 10 - Doctype
::: text nodes - składają się na nie przejścia do kolejnej linii :::
.children - zwraca wszystkie węzły reprezentujące elementy które są dziećmi - zwraca kolekcję HTML
cont liElem = document.querySelector('ul').children[1] // zwraca 2. element
liElem.textContent = "hello" // wpisuje w 2. dziecko pierwszego elementu z tagiem ul "hello"
document.querySelector('ul').children[1].children.id // zwraca id dziecka będącego dzieckiem elementu ul
.firstChild - zwraca pierwsze dziecko wybranego elementu będący węzłem
document.querySelector('ul').firstChild //text
.firstElementChild - zwraca pierwszy element będący dzieckiem
.lastChild - zwraca ostatni węzeł
.lastElementChild - zwraca ostatni element będący dzieckiem
.childElementCount - zwraca liczbę reprezentującą wielkość zbioru dzieci
.childParentNode - zwraca węzeł będący rodzicem
.parentElement
document.querySelector('li').perentElement.parentElement - zwraca dziadka (rodzica będącego rodzicem rodzica) elementu li np. div
.nextSibling - kolejne rodzeństwo (sibling) będące węzłem
.nextSiblingElement - kolejne rodzeństwo będące elementem
.perviousSibling - poprzedzające rodzeństwo będące węzłem
.previousSiblingElement - poprzedzające rodzeństwo będące elementem // jak w innych przypadkach zwraca null w przypadku braku
Ćwiczenia
Źródła:
https://developer.mozilla.org/en-US/do