2013-06-27, 14:30
  #1
Medlem
Paer86s avatar
Ngon som vet vad skillnaden r? Jag har frskt gra ett enkelt skript dr alla element i en klass ska skrivas ut p dokumentet. Det funkar med querySelectorAll, men inte getElementsbyClass, och jag frstr inte varfr. Detta r koden som inte funkar med "getElementsbyClass"

function getStuff(){
var list = document.getElementById("tuna");
for(var i=0; i<list.length; i++){
document.write(list[i].innerHTML);
}
}
window.onload=getStuff;
Citera
2013-06-27, 14:36
  #2
Medlem
Citat:
Ursprungligen postat av Paer86

function getStuff(){
var list = document.getElementById("tuna");
for(var i=0; i<list.length; i++){
document.write(list[i].innerHTML);
}
}
window.onload=getStuff;


Du anvnder ju inte ens getElementsByCLASS...
__________________
Senast redigerad av josott 2013-06-27 kl. 14:39.
Citera
2013-06-27, 14:38
  #3
Medlem
Povels avatar
getElementsByClassName heter det.

/p
Citera
2013-06-27, 14:44
  #4
Medlem
Paer86s avatar
Oj, frlt. Jag kopierade frn fel fnster dr jag hade testat att byta till klass istllet. Pinsamt. Koden jag skulle kopierat var:

function getStuff(){
var list = document.getElementsByClassName("tuna");
for(var i=0; i<list.length; i++){
document.write(list[i].innerHTML);
}
}
window.onload=getStuff;

Ber om urskt. Kan tillgga ocks att jag hller p att lr mig javaskript, och r verkligen inte duktig p det.
Citera
2013-06-27, 15:38
  #5
Medlem
Vilken weblsare prvar du i?
Citera
2013-06-27, 16:07
  #6
Medlem
Povels avatar
Citat:
Ursprungligen postat av Paer86
Oj, frlt. Jag kopierade frn fel fnster dr jag hade testat att byta till klass istllet. Pinsamt. Koden jag skulle kopierat var:

function getStuff(){
var list = document.getElementsByClassName("tuna");
for(var i=0; i<list.length; i++){
document.write(list[i].innerHTML);
}
}
window.onload=getStuff;

Ber om urskt. Kan tillgga ocks att jag hller p att lr mig javaskript, och r verkligen inte duktig p det.

Man skall typiskt sett inte anvnda document.write efter att sidan laddats. Gr man det s skrivs allt dess innehll ver. Det brukar bli en blank sida med just bara det man skrev ut hgst upp. Ingen CSS, ingenting. Det r inte s ofta det r vad man vill, men det kan kanske hnda.

I det hr fallet blir det lite extra lustigt eftersom getElementsByClassName("tuna") returnerar en "levande" NodeList. Sg att du fr ut tre element i den, och frsker loopa och skriva ut dem..

Det frsta document.write blankar d ut dokumentet och skriver det frsta elementets innerHTML.

Efter det finns inga fler element i NodeListen kvar, eftersom den r "levande", och de element som nyss fanns i den finns inte lngre i dokumentet - det skrevs ju ver. Drfr blir det bara en ynka utskrift.


Skillnaden mot querySelectorAll(".tuna") r att d fr man en "non-live" NodeList. Nr man loopar ver den s "frsvinner" inte element tv och tre ur den efter den frsta document.write(), och innerHTML fr alla i listan kommer att skrivas ut.

Se hr: https://developer.mozilla.org/en-US/...st#Description

/p
__________________
Senast redigerad av Povel 2013-06-27 kl. 16:11.
Citera
2013-06-28, 00:24
  #7
Medlem
Paer86s avatar
Tack s mycket fr svaret. Mycket hjlpsamt, hade inte kunnat lista/googla ut det sjlv. Hade ingen aning om att document.write inte r att fredra, frstr det nu bttre nr jag lst vidare. Jag fljer en youtube-skola om HTML5 och jag brjar inse att snubben kanske inte r expert.

Vad rekommenderas istllet fr document.write? Som i det hr exemplet, hur kan jag f sidan att skriva ut alla elementen i en klass om de nu lagrats med querySelectorAll?
Citera
2013-06-28, 10:53
  #8
Medlem
Povels avatar
Citat:
Ursprungligen postat av Paer86
Tack s mycket fr svaret. Mycket hjlpsamt, hade inte kunnat lista/googla ut det sjlv. Hade ingen aning om att document.write inte r att fredra, frstr det nu bttre nr jag lst vidare. Jag fljer en youtube-skola om HTML5 och jag brjar inse att snubben kanske inte r expert.

Vad rekommenderas istllet fr document.write? Som i det hr exemplet, hur kan jag f sidan att skriva ut alla elementen i en klass om de nu lagrats med querySelectorAll?


dw har ju den fr- och nackdelen (s att sga) att den skriver ut text precis dr den krs i dokumentet. Skriver man ngot i ett frdigladdat dokument s blankas det som sagt ut frst, vilket blir det givna resultatet om man kr dw i en window.onload.

Om du istllet gr det innan dokumentet laddats klart och stngts, s skriver du helt enkelt ut data i dokumentet, vilket kommer att g fint. Dokumentet stngs sedan automatiskt nr DOMen laddats klart (eventet DOMContentLoaded).

S om du, precis innan </body> (stngningen) kr funktionen borde det g bra (bara du definierat den innan sklart):

Kod:
<script>
  
getStuff();
</script>
</body> 

Om du vill lgga till data p sidan efter att dokumentet laddats klart kan du anvnda ngra alla hrliga metoder fr manipulation av strukturen som finns.

Kod:
<script>

// Skicka in ett klassnamn och ett ml fr dr info skall lggas
function printElementsWithClassName(classNametarget) {
  var 
elements document.getElementsByClassName(className), elem
    
doc documentitem
    
, list = doc.createElement("ul"); // Skapa ul
  
for (var idx=0len=elements.lengthidx<len; ++idx) {
    
elem elements[idx];
    
item doc.createElement("li"); // Skapa li
    // stt li:ns innehll till info om nodens namn och dess html
    
item.innerHTML "tag: " elem.nodeName +", html: " elem.innerHTML;
    list.
appendChild(item); // Lgg till li till skapad ul
  
}
  if (!
target) {target doc.body;} // Om man inte angav ngon target, anvnd body
  
target.appendChild(list); // Lgg till skapade ul sist i ett element (target)
}

printElementsWithClassName("tuna");
</script>
</body> 

Den hr kan man helt klart ven kra efter onload och dylikt.

Dessa tv funktioner fr att skapa och lgga in noder anvndes hr, men det finns ju mnga fler:
createElement: https://developer.mozilla.org/en-US/....createElement
appendChild: https://developer.mozilla.org/en-US/...de.appendChild


/p
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in