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.
Annonceindlæg fra Barco
Er jeres mødelokaler sikre nok?
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
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.
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?
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
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".