JQuery - DOM och element: Skillnad mellan sidversioner

Från Webbling
Hoppa till: navigering, sök
(Skapade sidan med 'En av huvuduppgifterna för jQuery är att tillhandahålla metoder med vilka vi enkelt kan manipulera DOM. Därför finns många funktioner för att söka i DOM o...')
 
 
(28 mellanliggande sidversioner av samma användare visas inte)
Rad 1: Rad 1:
En av huvuduppgifterna för [[jQuery]] är att tillhandahålla metoder med vilka vi enkelt kan manipulera [[DOM]]. Därför finns många funktioner för att söka i [[DOM ]] och för att förflytta sig i [[DOM]]-trädet. Det finns även många metoder för att läsa, skriva och förändra innehållet i [[DOM]]. I ett tidigare exempel visade vi hur man kan kalla på [[jQuery]] som en metod och därmed göra en sökning i [[DOM]]. Genom att använda <code>$(''selektor'')</code> kan man enkelt välja ut ett eller flera element i [[DOM]]. Genom att ange en selektor på samma vis som du anger en selektor i CSS kan du enkelt komma åt just de sektioner av [[DOM]] som du är ute efter.
En av huvuduppgifterna för [[jQuery]] är att tillhandahålla metoder med vilka vi enkelt kan manipulera element. Därför finns många funktioner för att söka ut element ifrån [[DOM ]], för att förflytta sig mellan element i [[DOM]]-trädet och liknande. Det finns även många metoder för att läsa, skriva och förändra innehållet i element.  


<div class="well well-warning">
== Att söka i [[DOM]] ==
OBS: att ändra i [[DOM]] kan vara kostsamt och göra din webbapplikation långsammare. Försök därför att minimera hur mycket förändringar du gör. Alla förändringar som innebär att hela sidan måste ritas om är de mest kostsamma. Man kan självklart inte göra en webbapplikation utan att något vis manipulera [[DOM]], så bli inte helt och hållet avskräckt ifrån att göra det. Försök bara att minimera vad du ändrar och hur ofta du gör det.
Vi ska börja med att titta på hur man kan  söka fram och välja ut specifika element ifrån [[DOM]] med hjälp av jQuery. I ett tidigare exempel visade vi hur man kan kalla på [[jQuery]] som en metod och därmed göra en sökning i [[DOM]]. Genom att använda anrop i formen av <code>$(''selektor'')</code> kan man enkelt välja ut ett eller flera element ifrån [[DOM]]. Genom att ange en selektor samma vis som du anger en selektor i CSS kan du alltså enkelt komma åt just de sektioner av [[DOM]] som du är ute efter.
</div>


== Grundläggande sökningar i DOM ==
Precis som i CSS, så finns det ett antal sätt på vilket man kan välja ut information ur [[DOM]]. Grunderna är som följer:
Precis som i CSS, så finns det ett antal sätt på vilket man kan välja ut information ur [[DOM]]. Grunderna är som följer:
* Om du inte sätter något specialtecken först i din selektor, kommer [[jQuery]] att leta efter HTML-element av den typ som din selektorsträng anger.
* Om du sätter en ”.” före en sträng i din selektor, kommer [[jQuery]] att leta efter de HTML-element som har den klass du angett.
* Om du sätter ett ”#” före en sträng i din selektor, kommer [[jQuery]] att lefta efter det HTML-element som har den ID som du angivit.


Självklart kan du, precis som i CSS, kombinera samman flera olika selektorer. Titta på sektionen om CSS för mer information om olika typer av selektorer som går att använda. Det finns en uppsjö av selektorer, men alla är inte användbara och vi tar inte upp alla möjligheter här på Webbling.
=== Söka på element-namn ===
Om du inte sätter något specialtecken först i din selektor, kommer [[jQuery]] att leta efter HTML-element av den typ som din selektorsträng anger.  
<codepen pen="GoNWro" tab="js,result" height="250">
</codepen>


== Att komma åt innehåll ==
=== Söka på klassnamn ===
I alla efterföljande jQuery-exempel, kommer vi att separera HTML, CSS och JavaScript i varsin flik och minimera den kod som skulle behövts för att skapa en komplett sida. Detta främst för att bara visa de som är viktigt för exemplet ifråga.
Om du sätter en "<code>.</code>" före en sträng i din selektor, kommer [[jQuery]] att leta efter de HTML-element som har den klass du angett.
I grunden finns det två sätt man kan få tillgång till innehållet i en DOM-nod. Dels kan vi komma åt den rena text som eventuellt står där, dels kan vi komma åt den HTML-kod som finns i noden och eventuellt ersätta den med annan HTML-kod. I jQuery kan vi göra detta med två olika kommandon.
<codepen pen="vLyxxE" tab="js,result" height="250">
OBS man kan inte läsa ut innehållet på formulärelement med dessa två kommandon. Vill du ha innehållet ifrån t.ex. ett textfält läser du ut det med metoden ”val()” istället.
</codepen>
.text()
 
Om du vill ha den rena texten ifrån ett element, kan man använda sig av metoden ”.text()”. Här följer ett kort exempel:
=== Söka på ID-namn ===
EPNjax
Om du sätter ett "<code>#</code>" före en sträng i din selektor, kommer [[jQuery]] att lefta efter det HTML-element som har den ID som du angivit.
I exemplet skapar vi en enkel HTML-struktur, där topphalvan är för att vi ska experimentera med och bottenhalvan, den gulfärgade ytan, är till för att visa upp resultatet ifrån vårt JavaScript.
<codepen pen="gPLmmr" tab="js,result" height="250">
På rad ett i JavaScript-koden läser vi ut innehållet som finns i HTML-elementet som har klassen ”.a”.  Detta görs med metoden ”text()”. När man kallar på denna utan parametrar, kommer jQuery att läsa ut innehållet ur motsvarande DOM-nod.
</codepen>
På rad två väljer vi ut det p-element som ligger i ett element som har ID satt till ”resultat”. Nu använder vi oss av en parameter i ”text”-metoden. När vi gör detta kommer eventuellt textinnehåll i den utvalda noden att ersättas med parameterinnehållet.
 
I nästa exempel ska vi se vad som händer om vi tar ut text ifrån en nod som har flera underelment.
== Mer komplexa exempel ==
GoNJoM
Självklart kan du, precis som i CSS, kombinera samman flera olika selektorer. Titta på sektionerna om CSS för mer information om olika typer av selektorer som går att använda (t.ex. kan du börja med "[[Introduktion till id och klasser]]").
I detta fall väljer vi ut den div som innehåller ett antal p-element. Som resultat får vi allt textinnehåll som finns i de olika p-elementen. Med andra ord så läser ”text()” ut texten ur elementet och alla dess underelement. Det kan alltså vara bra att vara mycket specifik i vilket element man väljer ut, om man inte vill råka få med massa extratext.
 
Vi provar en annan variant. Den här gången väljer vi ut alla p-element.
Låt oss söka ut element som tillhör en av två olika klasser. Detta kan vi göra med en selektor som använder <code>,</code> för att separera de olika selektorerna.
gPLpro
<codepen pen="MKbpmG" tab="js,result" height="250">
Vi får då tillbaka en sträng som innehåller texten ifrån alla p-element. Lägg märke till att vi även får texten som finns från början i resultat, dvs ”Detta skrivs över”. Vi läser ju ut innehållet innan vi skriver över denna.
</codepen>
Vad händer då om vi väljer ut alla p-element och använder ”.text('skriv över');”?
 
VemLjp
Om vi vill komma åt det första elementet av typen "<code>p</code>" kan vi göra så här:
Som förväntat så ersätts innehållet i varje p-element med den text vi skickade in. jQuery loopar alltså igenom alla p-element som matchas och kör den angivna metoden på varje element.
<codepen pen="bEBqrW" tab="js,result" height="250">
Nu ska vi prova att ersätta textinnehållet på ett element som har flera underelement.
</codepen>
RroPGZ
 
Som du ser så skrevs alla underelement över med den angivna texten och de försvann därmed ifrån vår DOM.
Som du ser fungerar även mer "avancerade" selektorer alldeles utmärkt med [[jQuery]].
.html()
 
Om man vill ha med den rena HTML-kod som byggt upp utvald nod, använder man sig av ”.html()”. Ett exempel på detta:
== Nästa aktivitet ==
jWVPVd
[[jQuery - innehåll i element]]
Vi läser alltså ut innehållet med ”.html()” och visar det med ”.text(a)”. Här ser vi att vi får den rena HTML-koden som motsvarar allt innehåll i vår div. Dock får vi inte med HTML-koden som skapade själva elementet vi valde ut, vi får enbart innehållet i det! Lägg märke till att vi även får med de attribut som är satta för varje element.
 
Om vi istället skulle visa det utlästa innehållet med ”.html(a)” skulle resultatet bli följande:
[[Category: jQuery|J4]]
zroGZG
[[Category: JavaScript|J4]]
Webbläsaren omvandlade alltså strängen med HTML-kod till nytt innehåll och skapade nya element utifrån detta.
Att göra dylika ändringar kan innebära att sidan måste ritas om ifrån grunden, vilket kan vara tungt för webbläsaren. Så gör inte detta i onödan. Försök att göra alla ändringar i en stor samtidig ändring, istället för många att göra många små. Då behövs bara sidan ritas om en gång. Förstås så gör du detta enbart när det är absolut nödvändig. Optimering är en hel vetenskap och speciellt krångligt blir det när man börjar involvera olika webbläsare, som kanske är olika bra på olika saker. Rent generellt är det bäst att skriva klart sin applikation, så allt fungerar och sedan efter det börja optimera.

Nuvarande version från 10 februari 2019 kl. 11.30

En av huvuduppgifterna för jQuery är att tillhandahålla metoder med vilka vi enkelt kan manipulera element. Därför finns många funktioner för att söka ut element ifrån DOM , för att förflytta sig mellan element i DOM-trädet och liknande. Det finns även många metoder för att läsa, skriva och förändra innehållet i element.

Att söka i DOM

Vi ska börja med att titta på hur man kan söka fram och välja ut specifika element ifrån DOM med hjälp av jQuery. I ett tidigare exempel visade vi hur man kan kalla på jQuery som en metod och därmed göra en sökning i DOM. Genom att använda anrop i formen av $(selektor) kan man enkelt välja ut ett eller flera element ifrån DOM. Genom att ange en selektor på samma vis som du anger en selektor i CSS kan du alltså enkelt komma åt just de sektioner av DOM som du är ute efter.

Grundläggande sökningar i DOM

Precis som i CSS, så finns det ett antal sätt på vilket man kan välja ut information ur DOM. Grunderna är som följer:

Söka på element-namn

Om du inte sätter något specialtecken först i din selektor, kommer jQuery att leta efter HTML-element av den typ som din selektorsträng anger.

See the Pen GoNWro by Patrik Grip-Jansson (@PGJ) on CodePen.

Söka på klassnamn

Om du sätter en "." före en sträng i din selektor, kommer jQuery att leta efter de HTML-element som har den klass du angett.

See the Pen vLyxxE by Patrik Grip-Jansson (@PGJ) on CodePen.

Söka på ID-namn

Om du sätter ett "#" före en sträng i din selektor, kommer jQuery att lefta efter det HTML-element som har den ID som du angivit.

See the Pen gPLmmr by Patrik Grip-Jansson (@PGJ) on CodePen.

Mer komplexa exempel

Självklart kan du, precis som i CSS, kombinera samman flera olika selektorer. Titta på sektionerna om CSS för mer information om olika typer av selektorer som går att använda (t.ex. kan du börja med "Introduktion till id och klasser").

Låt oss söka ut element som tillhör en av två olika klasser. Detta kan vi göra med en selektor som använder , för att separera de olika selektorerna.

See the Pen MKbpmG by Patrik Grip-Jansson (@PGJ) on CodePen.

Om vi vill komma åt det första elementet av typen "p" kan vi göra så här:

See the Pen bEBqrW by Patrik Grip-Jansson (@PGJ) on CodePen.

Som du ser fungerar även mer "avancerade" selektorer alldeles utmärkt med jQuery.

Nästa aktivitet

jQuery - innehåll i element