Leonard <dette.er.ikke.en.mail@der.virker.invalid> writes:
> Jonas Koch Bentzen <ingen.email@eksempel.dk> wrote:
>
> >Du har allerede fået et andet forslag, men jeg foretrækker at bruge
> >standardkode (ECMAScript + DOM), så her er et eksempel på det:
>
> Tak for det, jeg forsøger også at overholde standarderne.
>
> Det virker jo, men så indsatte jeg lidt html i teksten der skal vises:
>
> <li onmouseover='udskiftTekst("noget", "Thomas<br>Hovedvejen
> 162<br>5300 Kerteminde<br><a
> href=\"mailto:mail@mail.dk\">mail@mail.dk</a>")'>Thomas</li>
>
> men så viser den bare det hele med html?
x.innerHTML er ikke standard, ikke DOM, og ikke god objektorienteret skik.
..innerHTML er (syntaktisk set) en simpel værdi, og man forventer at det at
skrive en værdi til den er en simpel operation. Det er det ikke, da det man
skriver først bliver parset som HTML og der bliver bygget et syntaks-træ
(svarende til DOM knuder) for indholdet. Fra et OO-synspunkt bliver der altså
genereret nye objekter ved at man skriver en streng til en egenskab.
Det ville passe meget bedre (OO-synspunkt igen) hvis man havde metoder
som
.setInnerHTML(s)
og
.getInnerHTML()
da metoder netop forventes at have en dynamisk opførsel.
For at gøre det du forsøger ovenfor i DOM, så kan du gøre følgende
while(x.hasChildNodes()) x.removeChild(x.firstChild); // ryd op
x.appendChild(document.createTextNode("Thomas"));
x.appendChild(document.createElement("br"));
x.appendChild(document.createTextNode("Hovedvejen 162"));
x.appendChild(document.createElement("br"));
x.appendChild(document.createTextNode("5300 Kerteminde"));
x.appendChild(document.createElement("br"));
var a=document.createElement("a");
a.setAttribute("href","mailto:mail@mail.dk");
a.appendChild(document.createTextNode("mail@mail.dk"))
x.appendChild(a);
Det er lidt overvældende, og det kan også gøres kortere hvis man bruger
HTML-DOM'en (dette er ren Core DOM, den ved ikke hvad elementerne betyder,
i HTML DOM'en er der forkortelser til de forskellige HTML-elementer).
Et andet, og bedre (IMSNHO), alternativ er at have teksten stående et
andet sted på siden (skjult med CSS fx) og så blot lave en klon af
den. Altså:
while(x.hasChildNodes()) x.removeChild(x.firstChild); // ryd op
x.appendChild(document.getElementById("addrOrig").cloneNode(true))
og så have
<div style="display:none">
<address id="addrOrig">
Thomas<br>Hovedvejen 162<br>5300 Kerteminde<br>
<a href="mailto:mail@mail.dk">mail@mail.dk</a>
</address>
<div id="nogetAndetOrig"> ... </div>
</div>
et andet sted i dokumentet. Det hjælper ikke hvis man dynamisk
genererer sin HTML, men så kunne man jo også dynamisk generere sine
DOM-Nodes i stedet.
/L
--
Lasse Reichstein Nielsen - lrn@brics.dk
Ph.D. i datalogi søger stilling som software-udvikler i Øst- eller
Nordjylland. Curriculum Vitae: <URL:
http://www.brics.dk/~lrn/cv.html>