Avatar billede stephanryer Nybegynder
02. februar 2007 - 12:53 Der er 7 kommentarer og
1 løsning

Korrekt opbygning af child elementer såsom divs inde i divs eks.

Jeg arbejder på en side, hvor jeg gerne vil have en menu, der kan lidt forskelligt på klient-siden.

Lige nu genererer jeg hele menuen i ASP.NET og sender så hele strukturen til klienten.

Men da denne menu fylder 23 kb i sig selv, vil jeg gerne undersøge mulighederne for at skære ned på den html, der sendes og istedet opbygge strukturen på klientens side.

Jeg vil derfor gerne vide hvad den helt korrekte måde fx er at opbygge følgende vha java script:

<div id="div_1">
  <div id="div_a">
  <div>
  <div id="div_b">
      <div id="div_x">
      </div>
  </div>
</div>
<div id="div_2">

</div>

Jeg kender til createTextNode og child-strukturen, men hvordan dette gøres med children i children ved jeg ikke.

Nogen der har et bud på dette?

BTW: Jeg accepterer ikke svar, der inkluderer brugen af udfasede metoder såsom InnerHTML, InnerTEXT.

På foprhånd tak.
Avatar billede Slettet bruger
02. februar 2007 - 12:59 #1
Jeg ville nok kigge på:

var oParentElement = document.createElement("div");
var oAChildElement = document.createElement("div");
oParentElement.appendChild(oAChildElement);

oParentElement.setAttribute("id", "div_a");

Jeg har fundet mange gode ting på quirksmode:

http://www.quirksmode.org/dom/intro.html
Avatar billede stephanryer Nybegynder
02. februar 2007 - 13:21 #2
Efter man har oprettet elementerne på den der måde, er de så til at finde via fx

document.getELementByID("div_a")

ligesom hvis de var lavet statisk?
Avatar billede Slettet bruger
02. februar 2007 - 13:49 #3
Ja det vil jeg mene. I hvert fald kan du da lave en hurtig test...

Hvis du har en div i dokumentet med id "Hook", kan du jo tilføje lidt script:

var elem = document.getElementById("Hook");
var newElem = document.createElement("div");
newElem.setAttribute("id", "testDiv");

newElem.appendChild(document.createTextNode("Hello World!"));
elem.appendChild(newElem);

var testDiv = document.getElementById("testDiv");
alert(testDiv.firstChild.nodeValue);

Jeg er ikke 100% sikker på ovenstående, men det er nok tæt på
Avatar billede stephanryer Nybegynder
05. februar 2007 - 08:14 #4
Hejsa. Den artikel virker rigtig god. Jeg er så småt gået igang med at få den læst.

Jeg takker, det var lige sådan noget jeg skulle bruge :)

Læg et svar.
Avatar billede Slettet bruger
05. februar 2007 - 09:08 #5
Hermed gjort:)
Avatar billede stephanryer Nybegynder
05. februar 2007 - 09:30 #6
:)
Avatar billede olebole Juniormester
06. februar 2007 - 14:43 #7
<ole>

Hvis du skal lave mange divs med opbygningen:

<div id="div_1">
  <div id="div_a">&nbsp;<div>
  <div id="div_b">
      <div id="div_x">&nbsp;</div>
  </div>
</div>

- kunne du med fordel oprette en template på onload:

var oTempl = null;
window.onload = function(){
    var o = document.getElementById("div_1");
    oTempl = o.cloneNode(true);
    o.parentNode.removeChild(o);
}

Herefter kan du altid oprette et element på følgende måde:

var oElm = oTempl.cloneNode(true);
var aDv = oElm.getElementsByTagName("div");
oElm.setAttribute("id", "etNytID");
aDv[0].setAttribute("id", "etNytID_a");
aDv[0].firstChild.nodeValue = "En Tekst";
aDv[1].setAttribute("id", "etNytID_b");
aDv[2].setAttribute("id", "etNytID_x");
aDv[2].firstChild.nodeValue = "En Tekst X";
ELEMENT.appendChild(oElm);

Læg mærke til, at jeg har tilføjet et '&nbsp;' til de tomme divs. Dermed kan jeg sætte denne tekstnode til en værdi med:
    ELEMENT.firstChild.nodeValue = "En Tekst";

- cloneNode styrer ...!  ;o)

/mvh
</bole>
Avatar billede stephanryer Nybegynder
06. februar 2007 - 14:45 #8
yes, clone-node er ok, men det forudsætter blot at man har de originale liggende på siden. Man ken self skjulle disse i en div med display = none, men kan bedre lide den "rene" metode lige i det her tilfælde.

Men tak for inputtet alligevel :)
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