javascript - Hvordan få elementer etter klassenavn?
Ved å bruke JavaScript kan vi hente et element etter id ved å bruke følgende syntaks:
var x=document.getElementById("by_id");
Jeg prøvde å bruke følgende for å få tak i elementet etter klasse:
var y=document.getElementByClass("by_class");
Men det resulterte i en feil:
getElementByClass is not function
Hvordan kan jeg hente et element etter klassen sin?
Svar #1
Navnet på DOM-funksjonen er faktisk getElementsByClassName, ikke getElementByClassName, rett og slett fordi mer enn ett element på siden kan ha samme klasse, derfor: Elements.
Returverdien av dette vil være en NodeList-instans, eller et supersett av NodeList (FF returnerer for eksempel en instans av HTMLCollection). Uansett: returverdien er et array-lignende objekt:
var y = document.getElementsByClassName('foo');
var aNode = y[0];
Hvis du av en eller annen grunn trenger returobjektet som et array, kan du gjøre det enkelt, på grunn av dets magiske length-egenskap:
var arrFromList = Array.prototype.slice.call(y);
//or as per AntonB's comment:
var arrFromList = [].slice.call(y);
Som yckart foreslo, ville querySelector('.foo') og querySelectorAll('.foo') være å foretrekke, ettersom de faktisk er bedre støttet (93,99 % mot 87,24 %), ifølge caniuse.com:
- querySelector(all)
- getElementsByClassName
- Ikke bruk w3schools for å lære noe
- Se MDN for nøyaktig informasjon
Svar #2
Et annet alternativ er å bruke querySelector('.foo') eller querySelectorAll('.foo') som har bredere nettleserstøtte enn getElementsByClassName.
http://caniuse.com/#feat=queryselector
http://caniuse.com/#feat=getelementsbyclassname
Svar #3
Du må bruke document.getElementsByClassName('class_name');
og ikke glem at den returnerte verdien er et array av elementer, så hvis du vil ha det første, bruk:
document.getElementsByClassName('class_name')[0]OPPDATERING
Nå kan du bruke:
document.querySelector(".class_name") for å hente det første elementet med CSS-klassen class_name (null vil bli returnert hvis ingen av elementene på siden har dette klassenavnet)
eller document.querySelectorAll(".class_name") for å få en NodeList av elementer med css-klassen class_name (en tom NodeList vil bli returnert hvis ingen av elementene på siden har dette klassenavnet).
Svar #4
du kan bruke
getElementsByClassName
anta at du har noen elementer og har brukt et klassenavn 'test', så kan du hente elementer som følger
var tests = document.getElementsByClassName('test');
den returnerer en instans NodeList, eller dens supersett: HTMLCollection (FF).
Les mer
