Logotyp för Björns studiewebb

Selektorer - jQuery

Innehåll

På denna sida beskrivs man väljer ut element i DOM-struktur m.h.a. s.k. selektorer. Selektorer kan bl.a. vara de från CSS, jQuerys "utökning" av CSS-selektorer samt attributnamn och/eller -värde.

Observera att denna beskrivning av selektorer inte är komplett! Den skrevs baserad på den dokumentation som gällde 2011-07-31, d.v.s. kommer bli föråldrad :-) (och jag kan ha missat några). Se referenser för komplett dokumentation av selektorer.

Inledning

Selektorer används för att välja ut element att kapsla in i jQuery-objekt och för att begränsa (filtrera) ut element i existerande jQuery-objekt.

I första exempel nedan så väljs alla rubriker av nivå 2 och i andra exempel så väljs först alla stycken, som sen filtreras till de som är första barnelement.

$("h2");
$("p").filter(":first-child");

Strängar och citationstecken

Selektorer av typen CSS (inklusive utökade) och attribut anges i strängar, d.v.s. måste inneslutas i dubbla eller enkla citationstecken (" eller '). I de fall där citationstecken ingår i strängar så kan man använda "den andra" för att innesluta strängen eller lägga till tecknet \ före tecknet i strängen, t.ex. "don't" eller 'don\'t'.

Kombinera selektorer

Precis som i CSS kan man kombinera selektorer för att urval ska bli så precist som möjligt, t.ex. "p.kommentar" - stycke av klassen kommentar - och "h2[id]:even" - alla rubriker av nivå 2 som har ett attribut id och är varannan (jämna - se nedan).

Till början på sida

CSS

CSS-selektorer kan användas för att välja ut element, d.v.s. man bör ha grundläggande kunskap om CSS för att kunna använda dem bäst.

Grundläggande CSS-selektorer

De grundläggande CSS-selektorerna har funnits med i CSS-standard sen början och är också de enklaste att förstå, d.v.s. är de mest vanligt förekommande.

Grundläggande CSS-selektorer
Selektor Element som väljs
"tagg" Alla element av taggen
".klassnamn" Alla element av klassen klassnamn
"#id" Elementet med id id
"*" Alla elementet

För att välja element med flera selektorer så separeras selektorerna med komma (se exempel nedan).

Nedan väljs

  • alla taggar av typen H1
  • alla taggar av klassen "kod"
  • tagg med id "sidfot"
  • alla rubriker med taggen H1 och H2 samt taggar av klassen "rubrik"
$("h1");
$(".kod");
$("#sidfot");
$("h1, h2, .rubrik");

Relationsselektorer

CSS-selektorer möjliggör val av element med relation till varandra, bl.a. barn, ättlingar och syskon.

Relationsselektorer
Selektor Element som väljs
"selektor1 selektor2" Alla element selektor2 som är ättlingar till selektor1
"selektor1 > selektor2" Alla element selektor2 som är barn till selektor1, d.v.s. "direkta" ättlingar
"selektor1 + selektor2" Alla element selektor2 som är efterföljande syskon till selektor1
":first-child" Första barnelementet

Nedan väljs

  • alla P-taggar som är ättlingar till DIV-taggar av klass "kod"
  • alla P-taggar som är barn (direkta ättlingar) till DIV-taggar av klass "kod"
  • alla P-taggar som är syskon till, och följer direkt efter, H2-tagg
  • alla P-taggar som är första barnet
$("div.kod p");
$("div.kod>p");
$("h2+p");
$("p").filter(":first-child");

Metoden .filter() förklaras i senare delar.

Pseudoselektorer (övriga)

Övriga pseudoselektorer, utöver :first-child, är följande.

Pseudoselektorer (övriga)
Selektor Element som väljs
":link" Alla länkelement (<a>) som inte besökts
":visited" Alla länkelement (<a>) som besökts
":active" Element som aktivt, d.v.s. klickas på
":focus" Element som har fokus
":hover" Element som markör står över
":lang" Element märkta med språket lang
":first-line" Elements första rad (om text)
":first-letter" Elements första bokstav (om text)
":before" Element som markör står över
":after" Element som markör står över

Författaren behöver fortfarande förstå hur dessa selektorer är användbara...

Fler selektorer

CSS har även stöd för attribut, vilket jag valt att förklara i avsnittet Attribut nedan (bl.a. då jag inte börjat använda detta i CSS... förrän i denna underwebb :-)).

jQuery har utökats med några CSS-liknande selektorer, vilket är ämnet för nästa avsnitt.

Till början på sida

Utökning av CSS

För att få bättre precision för urval av element så utökar jQuery "CSS-selektorer" med några ytterligare. Fördelen med detta är att förstår man selektorer i CSS så är det lätt att lära sig denna utökning.

Formulärelement

Det finns selektorer för att välja element i formulär, d.v.s. knappar, textrutor, m.m..

Dessa selektorer är relativt självförklarande och därför för ges inga exempel. :-)

Formulärelement
Selektor Element som väljs
":button" Alla knappelement
":checkbox" Alla kryssruteelement
":file" Alla filuppladdningselementet
":hidden" Alla elementet som inte är synliga i sida, vilket inkluderar dolda textrutor
":image" Alla bildelementet
":input" Alla formulärelementet, d.v.s. input-taggen
":password" Alla lösenordselementet
":radio" Alla radioknappselementet
":reset" Alla knappelementet av typen återställ (reset)
":submit" Alla knappelementet av typen skicka (submit)
":text" Alla textruteelementet

Selektorn :hidden väljer alla element som är dolda, d.v.s. dold textruta likaväl som element vars stil är display: none. I detta fall kan det vara bättre och välja ut alla input-taggar som har attribut och värde "[type='hidden']".

Det finns även några selektorer som är relaterade till formulär, t.ex. baserade på tillstånd.

Formulärrelaterade selektorer
Selektor Element som väljs
":checked" Alla ibockade kryssrute- eller radioknappselement
":disabled" Alla inaktiverade formulärelement
":enabled" Alla aktiverade formulärelement
":selected" Alla valda alternativ i listruteelement

I kategori ovan ingår även CSS-selektorn :focus.

Ordning

De ordningsbaserade selektorerna bygger på att index börjar med 0, d.v.s. de udda elementen är faktiskt de jämna i sidan.

Ordningsrelaterade selektorer
Selektor Element som väljs
":eq(n)" Alla element som matachar index n
":gt(n)" Alla element vars index är större än n
":lt(n)" Alla element vars index är mindre än n
":even" Alla element vars index är jämnt
":odd" Alla element vars index är udda
":first" Första barnelementet
":last" Sista barnelementet
  1. ett
  2. två
  3. tre
  4. fyra
  5. fem
  6. sex

I lista ovan ändras (med kod nedan)

  • udda alternativs bakgrundsfärg till ljusgrå
  • femte alternativets bakgrundsfärg till ljusblå
  • första alternativets stil till fet
  • alternativ större än 4 till kursiv stil
":odd"
":nth(4)"
":first"
":gt(3)"

Ordningstal börjar på 0, d.v.s. jag har inte skrivit fel i kod ovan. :-)

Relation

Dessa relationsrelaterade selektorer har anpassats för att följa CSS-standard, d.v.s. numrering börjar på 1 (och inte 0, som de ordningsrelaterade).

Relationsselektorer
Selektor Element som väljs
":last-child" Sista barnelement
":nth-child(n)" Barnelement nummer n (där nummer är 1-baserat)
":only-child" Barnelement som saknar syskon
":parent" Föräldraelement
"selektor1 ~ selektor2" Barnelement selektor2 till selektor1

Villkor

Det finns även några selektorer baserade på villkor, t.ex. att element har något.

Fler selektorer
Selektor Element som väljs
":contains('text')" Element som innehåller texten text
":empty" Element som är tomma
":has(selektor1)" Element som har ättlingelement selektor1
":not(selektor1)" Element som inte matchar selektor1
  1. ett
  2. två
  3. fyra, och bold text

I lista ovan ändras (med kod nedan)

  • bakgrundsfärg för alternativ med texten 'två' till ljusgrå
  • tomma alternativets bakgrundsfärg till ljusblå
  • bakgrundsfärg för alternativet med B-element till rosa
":contains('två')"
":empty"
":has(b)"

Fler selektorer

I detta avsnitt beskrivs fler selektorer - selektorer som jag inte lyckats passa in i övriga kategorier.

Fler selektorer
Selektor Element som väljs
":animated" Element som håller på att animeras vid exekvering av skript
":header" Element av typen rubrik
":visible" Element som syns i sida

jQuery har även utökat stödet för attribut, vilket jag valt att förklara i avsnittet Attribut nedan.

Till början på sida

Attribut

Även namn eller värde på attribut kan användas för att välja ut element.

Attributselektorer
Selektor Element som väljs
"[namn]" Element som har ett attribut med namnet namn
"[namn='varde']" Element som har ett attribut med namnet namn och värdet varde
"[namn^='varde']" Element som har ett attribut med namnet namn och ett värde som börjar med varde
"[namn$='varde']" Element som har ett attribut med namnet namn och ett värde som slutar med varde
"[namn*='varde']" Element som har ett attribut med namnet namn och ett värde som innehåller varde
"[namn~='varde']" Element som har ett attribut med namnet namn och ett värde som innehåller ordet varde
"[namn|='varde']" Element som har ett attribut med namnet namn och antingen värdet varde eller börjar med värdet varde följt av ett bindestreck
"[namn!='varde']" Element som har ett attribut med namnet namn men inte värdet varde

När det gäller selektor som väljer baserat på ord så måste värdet börja med värdet och följas av mellanslag, sluta med värdet och föregås av mellanslag eller både föregås och efterföljas av mellanslag. I första exempel nedan kommer alla attribut med ordet fet i sig väljas, d.v.s. med alla följande id:

  • fet stil
  • kan fet valjas
  • nisse var fet

I andra exemplet kommer kommer alla rubriker vars värde börjar på tal eller tal- att väljas, men inte talet.

$("h2[id~='fet']");
jQuery("h2[id|='tal'");

Till början på sida

DOM-element

Vi kan även använda DOM-element, t.ex. document. Detta är något som bl.a. används som selektor när vi använder metoden ready.

$(document).ready(function() {
  //Kod att exekvera nar sida laddats
});

Till början på sida

Större exempel

Nedan är länkar till större exempel.

Referenser

Nedan finns några böcker och webbsidor/-platser som jag använt för att skapa denna underwebb.