Forståelse af jQuery & javascript

Tags:    jquery javascript

Hejsa

Jeg er ved at rode med jQuery og noget AJAX via JSON, og leger bare for at forsøge at lære det bedre og forstå det (sådan lærer jeg godt).
Jeg kan få min jQuery til at få noget JSON tilbage via AJAX, og arbejde med det, men opdagede noget underligt.
Mit forsøg gik ud på at få et array af objekter tilbage hvor hvert objekt har en property kaldet "name".

Min HTML ser således ud med en knap og en div til resultatet:
Fold kodeboks ind/udHTML kode 


Og dette er mit script:
Fold kodeboks ind/udJScript kode 


Jeg kan sagtens få disse objekter tilbage og lave min resultat-div rød (hurtig og nem illustration om den har ændret noget) og så derefter iterere igennem dem.
Først ændrede jeg teksten i div'en sammen med en alert så jeg kunne se hver tekst ændre sig i den røde resultat-div.

Nu ville jeg så tilføje flere div's indeni denne eksisterende med hver deres "name" udskrevet i den - så jeg fik en komplet liste.

Det "sjove" er nu at hvis jeg ændrer teksten indeni i resultat-div'en så vil den kun appende en enkelt div og ændrer så alt tekst indeni resultat-div'en og dens child-div (den jeg har lavet) og for hvert nyt objekt så tilføjes der ikke flere div'er men kun teksten ændres.
Nu har jeg udkommenteret den del der ændrer teksten og nu virker det, men forstår ikke helt hvorfor.

Nogen der kan hjælpe mig videre?



6 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 13 karma
Sorter efter stemmer Sorter efter dato
når du bruger .text eller .html overskriver du indholdet i din div, når du bruger .append eller .prepend tilføjer du, og da det er et loop, og du overskriver hvergang, vil det kun være den sidste der er der :)

edit:
prøv evt også at kig lidt på console.log("..") istedet for alert :)
hvis du bruger consolen i chrome eller har firebug til firefox, så slipper du for at skulle lukke en alert-popup pr tick i dit loop :)



Indlæg senest redigeret d. 14.06.2012 15:54 af Bruger #3427
prøv at download firefox+firebug eller chrome og test det her:
Fold kodeboks ind/udJScript kode 


jeg kan personligt ikke lave javascript uden consolen mere efter jeg først har lært at bruge den :)



når du bruger .text eller .html overskriver du indholdet i din div, når du bruger .append eller .prepend tilføjer du, og da det er et loop, og du overskriver hvergang, vil det kun være den sidste der er der :)

edit:
prøv evt også at kig lidt på console.log("..") istedet for alert :)
hvis du bruger consolen i chrome eller har firebug til firefox, så slipper du for at skulle lukke en alert-popup pr tick i dit loop :)

Tak.
Jeg troede at
.text overskrev en ikke-defineret tekst indeni, men lod andre elementer være så fx <p> eller <span> ville blive uberørt,
og så at selve
.html ville overskrive andre elementer.

Og grunden til der altid kom en er at jeg først overskriver de tidligere elementer med navnet ("name") og derefter tilføjer en ny div.

Det gav meget bedre mening :)
Problemet med console.log er at den giver fejl i IE og derfor jeg bruger alerts.

Takker igen for hjælpen :)



prøv at download firefox+firebug eller chrome og test det her:
Fold kodeboks ind/udJScript kode 


jeg kan personligt ikke lave javascript uden consolen mere efter jeg først har lært at bruge den :)
Dem har jeg allerede, men console virker ikke i IE og derfor er det ikke løsningen for mig.
Console stopper vel heller ikke eksekveringen af din kode imens du ser på det?
Det gør en alert jo så jeg kan se at den bliver added en efter en hvilket jeg godt kan li nu jeg lige skal lære de her småting.




prøv at download firefox+firebug eller chrome og test det her:
Fold kodeboks ind/udJScript kode 


jeg kan personligt ikke lave javascript uden consolen mere efter jeg først har lært at bruge den :)
Dem har jeg allerede, men console virker ikke i IE og derfor er det ikke løsningen for mig.
Console stopper vel heller ikke eksekveringen af din kode imens du ser på det?
Det gør en alert jo så jeg kan se at den bliver added en efter en hvilket jeg godt kan li nu jeg lige skal lære de her småting.


du kan sætte breakpoints istedet (lige som i C#) - men okay hver sin smag =)



jeg ville også foretrække console.log ... men muligheder er der selvfølgelig, at bruge en wrapper, så det også virker i ie;

Fold kodeboks ind/udJScript kode 


Og så bare bruge log("asdasdasdasdasdasd asd asd asd asd asd");



t