Avatar billede sw_red_6 Nybegynder
21. december 2006 - 09:01 Der er 8 kommentarer og
1 løsning

replaceChild virker ikke 2. gang

Jeg har følgende kode, som virker. Problemet er at det kun er første gang den virker, anden gang for jeg en fejl om at den mangler et objekt. Er der nogen der kan komme med en løsning, eller evt. et forslag til en anden måde at gøre det?

var newP = document.createElement("p");
newP.setAttribute("id", "tmp");
var newSerie = document.createTextNode("<?=$dec_serie?>");
newP.appendChild(newSerie);
var dec_serie = document.getElementById('tmp');
//alert(dec_serie);
var parent = dec_serie.parentNode;
parent.replaceChild(newP, dec_serie);
Avatar billede sw_red_6 Nybegynder
21. december 2006 - 11:26 #1
nåh, jeg kiggede på alternativer og fik fumlet mig frem til det her i stedet for:
var dec_serie = document.getElementById('tmp');
while (dec_serie.firstChild) {
  dec_serie.removeChild(dec_serie.firstChild);
}
var newP = document.createElement("p");
var newSerie = document.createTextNode("<?=$dec_serie?>");
newP.appendChild(newSerie);
dec_serie.appendChild(newP);

Det virker efter hensigten, men det kan muligvis laves bedre..?
Avatar billede olebole Juniormester
21. december 2006 - 12:35 #2
<ole>

En anden - ikke nødvendigvis bedre - metode kunne være at klone hele elementet, du refererer til med: 'dec_serie.parentNode'

Når du skriver:
  var o = ELEMENT.cloneNode(true);

- hvor ELEMENT indeholder en reference til elementet, kloner du elementet plus indhold. Undlader du 'true', kloner du elementet uden indhold.

Du kunne altså klone 'dec_serie.parentNode' uden indhold - fylde indhold i klonen - og til sidst udskifte 'dec_serie.parentNode' med klonen  =)

/mvh
</bole>
Avatar billede sw_red_6 Nybegynder
21. december 2006 - 14:11 #3
jeg tror ikke helt jeg kan følge med der, hvis du kunne komme med en lidt større stump kode tror jeg at jeg vil have nemmere ved at forstå det, hvor underligt det så end kan lyde..?
Avatar billede olebole Juniormester
21. december 2006 - 14:32 #4
var o = document.getElementById('tmp');
var dec_serie = o.cloneNode(false);

var newP = document.createElement("p");
var newSerie = document.createTextNode("<?=$dec_serie?>");
newP.appendChild(newSerie);
dec_serie.appendChild(newP);

o.parentNode.replaceChild(dec_serie, o);
Avatar billede sw_red_6 Nybegynder
21. december 2006 - 14:36 #5
hmm det kunne man jo også. Det ville måske være bedre at gøre det på den måde hvis der var mere en 1 childnode..
Avatar billede olebole Juniormester
21. december 2006 - 14:40 #6
Jeg plejer selv at gøre som du, men en dag med god tid, vil jeg teste de to metoder op mod hinanden  =)
Avatar billede sw_red_6 Nybegynder
29. januar 2007 - 13:48 #7
hmm var konklusionen at i øjeblikket kan det muligvis laves bedre, men ingen ved hvordan..?
hvis du ligger et svar olebole så deler vi pointene, hvis det er OK med dig..
Avatar billede olebole Juniormester
29. januar 2007 - 15:02 #8
Nu var det jo bare et andet - ikke nødvendigvis bedre - forslag til en løsning, så lad os vente til en anden gang, hvor jeg bidrage med noget nyt og bedre end dine egne forsøg. Men tak for tanken  ;o)
Avatar billede sw_red_6 Nybegynder
08. februar 2007 - 14:45 #9
Det siger vi så, takker for dit input
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