Wyszukaj / o blogu

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

GRA


Źródła:

https://developer.mozilla.org/en-US/do