Haku: getElement *, querySelector *

DOM-navigointiominaisuudet ovat erinomaisia, kun elementit ovat lähellä toisiaan. Entä jos he eivät ole? Kuinka saada mielivaltainen sivun elementti?

Sille on muita hakumenetelmiä.

document.getElementById tai vain id

Jos elementillä on id -määritteen avulla voimme saada elementin käyttämällä menetelmää document.getElementById(id) riippumatta siitä, missä se on.

Esimerkiksi :

Lisäksi on olemassa globaali muuttuja, jonka nimi on id ja joka viittaa elementtiin:

… Ellemme julista JavaScript-muuttujaa sama nimi, niin se on etusijalla:

Älä käytä id-nimisiä globaaleja muuttujia elementtien käyttämiseen

Tätä toimintaa kuvataan eritelmä, joten se on eräänlainen standardi. Mutta sitä tuetaan pääasiassa yhteensopivuuden vuoksi.

Selain yrittää auttaa meitä sekoittamalla JS: n ja DOM: n nimiavaruudet. Se on hieno yksinkertaisille skripteille, jotka on upotettu HTML-muotoon, mutta se ei yleensä ole hyvä asia. Nimen ristiriitoja voi olla. Kun lukee JS-koodia eikä HTML-koodia ole näkyvissä, ei ole selvää, mistä muuttuja tulee.

Tässä opetusohjelmassa käytämme id viitata suoraan elementtiin lyhyyden suhteen, kun on selvää, mistä elementti tulee.

Todellisessa elämässä document.getElementById on suositeltava menetelmä.

id on oltava yksilöllinen

id on oltava ainutlaatuisia. Annetussa id -asiakirjassa voi olla vain yksi elementti.

Jos on olemassa useita elementtejä, joilla on sama id, niin sitä käyttävien menetelmien käyttäytyminen on arvaamatonta, esim document.getElementById voi palauttaa minkä tahansa tällaisista elementeistä satunnaisesti. Joten pidä kiinni säännöstä ja pidä id ainutlaatuisena.

Vain document.getElementById, ei anyElem.getElementById

Menetelmää getElementById voidaan kutsua vain osoitteessa document -objekti. Se etsii annettuja id koko asiakirjasta.

querySelectorAll

Ylivoimaisesti eniten monipuolinen menetelmä, elem.querySelectorAll(css) palauttaa kaikki elem -elementit, jotka vastaavat annettua CSS-valitsinta.

Täältä etsimme kaikkia <li> elementit, jotka ovat viimeisiä lapsia:

Tämä menetelmä on todellakin tehokas, koska mitä tahansa CSS-valitsinta voidaan käyttää.

Voi käyttää myös näennäisluokat

CSS-valitsimen näennäisluokat, kuten :hover ja :active ovat myös tuettu. Esimerkiksi document.querySelectorAll(":hover") palauttaa kokoelman elementeillä, jotka osoitin on nyt ohi (pesimäjärjestyksessä: syrjäisimmistä <html> sisäkkäin yksi).

querySelector

Kutsu elem.querySelector(css) palauttaa annetun elementin ensimmäisen elementin valitsin.

Toisin sanoen tulos on sama kuin elem.querySelectorAll(css), mutta jälkimmäinen etsii kaikkia elementtejä ja valitsee yhden, kun taas elem.querySelector etsii vain yhtä. Joten kirjoittaminen on nopeampaa ja myös lyhyempää.

vastaa

Aikaisemmat menetelmät etsivät DOM: ia.

Elem.matches (css) ei etsi mitään , se vain tarkistaa, vastaako elem annettuja CSS-valitsimia. Se palauttaa true tai false.

Menetelmä on kätevä, kun toistamme elementtejä (kuten taulukko tai jotain) ja yrittää suodattaa meidät kiinnostavat.

Esimerkiksi:

lähin

Elementin esi-isät ovat: vanhempi, vanhempi, sen vanhempi ja niin edelleen. Esivanhemmat muodostavat yhdessä vanhempien ketjun elementistä ylöspäin.

Menetelmä elem.closest(css) etsii lähintä CSS-valitsinta vastaavaa esi-isää. Itse elem sisältyy myös hakuun.

Toisin sanoen menetelmä closest nousee ja tarkistaa jokaisen vanhemman. Jos se vastaa valitsinta, haku pysähtyy ja esi-isä palautetaan.

Esimerkiksi:

getElementsBy *

On myös muita etsittäviä tapoja tunnisteen, luokan jne. solmuille.

Nykyään ne ovat enimmäkseen historiaa, koska querySelector on tehokkaampi ja lyhyempi kirjoittaa.

Joten tässä käsitellään niitä lähinnä täydellisyyden vuoksi, mutta voit silti löytää ne vanhoista skripteistä.

  • elem.getElementsByTagName(tag) etsii elementtejä annetulla ja palauttaa niiden kokoelman. Parametri tag voi olla myös tähti "*" kaikille ”tageille”.
  • elem.getElementsByClassName(className) palauttaa elementit, joilla on annettu CSS-luokka.
  • document.getElementsByName(name) palauttaa elementit annettu name -attribuutti, koko asiakirja. Hyvin harvoin käytetty.

Esimerkiksi:

Etsitään kaikki input -tagit taulukon sisältä:

Älä unohda "s" kirjain!

Aloittelevat kehittäjät unohtavat joskus kirjaimen "s". Toisin sanoen he yrittävät soittaa getElementByTagName getElementsByTagName: n sijaan.

"s" kirjain puuttuu getElementById -kohdasta, koska se palauttaa yhden elementin. Mutta getElementsByTagName palauttaa kokoelman elementtejä, joten sisällä on "s".

Se palauttaa kokoelman, ei elementti!

Toinen yleinen aloittelijavirhe on kirjoittaa:

Se ei toimi, koska se vie kokoelman syötteitä ja osoittaa arvon sille eikä sen sisällä oleville elementeille.

Meidän on joko iteroitava kokoelma tai haettava elementti sen hakemiston perusteella ja määritettävä sitten seuraavasti:

Etsitään elementtejä .article:

Live-kokoelmat

Kaikki menetelmät "getElementsBy*" palauttavat elävän kokoelman. Tällaiset kokoelmat heijastavat aina asiakirjan nykyistä tilaa ja ”automaattinen päivitys”, kun se muuttuu.

Alla olevassa esimerkissä on kaksi komentosarjaa.

  1. Ensimmäinen luo viitteen <div> -kokoelmaan. Sen pituus on toistaiseksi 1.
  2. Toinen komentosarja suoritetaan, kun selain tapaa vielä yhden <div>, joten sen pituus on 2.

Sen sijaan , querySelectorAll palauttaa staattisen kokoelman. Se on kuin kiinteä joukko elementtejä.

Jos käytämme sitä sen sijaan, molemmat komentosarjat tuottavat 1:

Nyt voimme helposti nähdä eron. Staattinen kokoelma ei lisääntynyt, kun uusi div esiintyi asiakirjassa.

Yhteenveto

DOM-solmujen etsimiselle on 6 päämenetelmää:

Menetelmä Hakee … Voi l elementissä? Live?
querySelector CSS-valitsin
querySelectorAll CSS-valitsin
getElementById id
getElementsByName name
getElementsByTagName -tunniste tai "*"
getElementsByClassName luokka

Ylivoimaisesti eniten käytetyt ovat querySelector ja querySelectorAll, mutta getElement(s)By* voi olla satunnaisesti hyödyllistä tai löytyy vanhoista skripteistä.

Sen lisäksi:

  • elem.matches(css) tarkistaaksesi, vastaa annettuja CSS-valitsimia.
  • elem.closest(css) on etsimässä lähintä vastaavaa esi-isää annettu CSS-valitsin. Myös itse elem tarkistetaan.

Mainitaan tässä vielä yksi tapa tarkistaa lapsen ja vanhemman suhde, koska se on joskus hyödyllistä:

  • elemA.contains(elemB) palauttaa arvon true, jos elemB on elemA (elemA jälkeläinen) tai kun elemA==elemB.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *