Avatar billede the_saint Nybegynder
22. april 2008 - 17:28 Der er 3 kommentarer og
2 løsninger

Tilføje string efter en <tr>

Hej Exp'er

Jeg kalder en side vha. AJAX, som genere noget HTML (dvs jeg har det kun som string) - dette html ligner noget ala dette:

<tr><td>Data</td><tr><tr><td>mere data</<td></tr>

Er det muligt at få dette sat ind efter
<tr id="content_id"><td>Navn</td></tr>

Eller skal jeg hen og lave det hele om til noget overbloatet XML?

Mvh.
Avatar billede w13 Novice
22. april 2008 - 19:19 #1
Hvis du nu genererer det sådan her i stedet:

Data,mere data

Så kan du gøre sådan her:

aString="Date,mere data";
aString=aString.split(",");

var o=document.getElementById("content_id");
o.nextSibling.insertBefore(document.createElement("tr"));
for(var i=0;i<aString.length;i++){
  o.nextSibling.appendChild(document.createElement("td"));
  o.nextSibling.lastChild.appendChild(document.createTextNode(aString[i]));
}

Det er langt mere korrekt end at benytte innerHTML i hvert fald.

I øvrigt bør du overveje at overføre data med XML eller JSON. I dette tilfælde ville JSON klart være bedst.
Avatar billede the_saint Nybegynder
28. april 2008 - 16:49 #2
Hej

Det virkede, tak...

Men et nyt problem er opstået - Noget af det data jeg sender med skal indgå i en onclick function, sådan her ser min function ud:


var json = eval("("+response.text+")");

for(i in json)
{
    var tmpResource = json[i];
    var row = tbl.insertRow(rowIndex);
    var cResource = row.insertCell(0);
   
    cResource.style.backgroundColor = "#eee";
    cResource.style.paddingLeft = "10px";
    cResource.appendChild(document.createTextNode(tmpResource.name));
   
    for(x in tmpResource.days)
    {
        var tmpDay = tmpResource.days[x];
        var cell = document.createElement("TD");
        cell.style.backgroundColor = tmpDay.background;
        cell.align = "center";
        cell.onclick = function(){ document.location = 'index.php?mode=day&user=R'+tmpDay.clickevent.id+'&date='+tmpDay.clickevent.date };        cell.appendChild(document.createTextNode(tmpDay.text));
        row.appendChild(cell);
    }
    rowIndex++;
}

Det er denne linje som gør knuder:

cell.onclick = function(){ document.location = 'index.php?mode=day&user=R'+tmpDay.clickevent.id+'&date='+tmpDay.clickevent.date };

Problemet er at den altid evalurere det seneste forkomst af tmpDay.clickevent.id og .date..

Hva skyldes det problem, og hvordan får jeg løst det?
Avatar billede w13 Novice
28. april 2008 - 18:27 #3
Det er et ret almindeligt problem.

Du beder den om at køre følgende ved onclick:

document.location = 'index.php?mode=day&user=R'+tmpDay.clickevent.id+'&date='+tmpDay.clickevent.date

Så først når der klikkes går den ind og finder ud af, hvad der ligger i variablerne, og på det tidspunkt vil de jo være ændret mange gange.

Gør i stedet sådan her:

cell.onclick = new Function("document.location = 'index.php?mode=day&user=R"+tmpDay.clickevent.id+"&date="+tmpDay.clickevent.date);

Med new Function() kan man nemlig generere funktionen som en tekststreng.
Brandsmart. =P
Avatar billede w13 Novice
28. april 2008 - 18:28 #4
Hov, der manglede lige en apostrof:

cell.onclick = new Function("window.location.href = 'index.php?mode=day&user=R"+tmpDay.clickevent.id+"&date="+tmpDay.clickevent.date+"'");

Har i øvrigt rettet til window.location.href, som er "rigtigere".
Avatar billede w13 Novice
19. juni 2008 - 09:49 #5
Tak for point! :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester