[JS] DOM > hoe div legen en weer vullen?

Pagina: 1
Acties:

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Zoals gezegd, probeer ik een javascript polletje te bouwen. In mijn vorige topic gezegd dat het het mooiste / beste is om dit te doen via de DOM, ipv innerHTML. Dus ben ik nu voor het eerst hiermee aan het prutsen:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
    var div = null;
    var poll = [
      {'type' : 'radio',
       'ques' : 'hoe gaat het met u?',
       'ansr' : ['heel goed', 'goed', 'gaat wel', 'slecht']
      },
      {'type' : 'text',
       'ques' : 'waarom gaat het zo?'
      },
      {'type' : 'note',
       'note' : 'Bedankt voor uw medewerking!'
      }
    ];

    function pollInit() {
      div = document.getElementById('polldiv');
      pollUpdate();
    }

    function pollUpdate() {
      pollQuestion(item);
      item++;
      if (item == (poll.length)) {
        setTimeout("div.style.display = 'none'", 1000);
      }
    }

    function pollQuestion(iPoll) {
      switch (poll[iPoll]['type']) {
        case 'radio': pollRadio(iPoll); break;
        case 'text' : pollText(iPoll) ; break;
      }
    }

    function pollRadio(iPoll) {
      var question = createNode('text', poll[iPoll]['ques']);
      var br = createNode('br');
      div.appendChild(question);
      div.appendChild(br);
      for (i = 0; i < poll[iPoll]['ansr'].length; i++) {
        var input = createNode('input', {'type' :'radio', 'onclick' : 'pollUpdate()'});
        var text  = createNode('text', poll[iPoll]['ansr'][i]);
        var label = createNode('label');
        var br = createNode('br');
        label.appendChild(input);
        label.appendChild(text);
        div.appendChild(label);
        div.appendChild(br);
      }
    }

    function pollText(iPoll) {
      var question = createNode('text', poll[iPoll]['ques']);
      var textarea = createNode('textarea');
      div.appendChild(question);
      div.appendChild(textarea);
    }

De eerste vraag die pollUpdate tegenkomt, is de multiple choice vraag "hoe gaat het met u?". Als deze beantwoord is, wordt de volgende vraag, "waarom gaat het zo" naar de div geschreven in pollText. De bedoeling is om de inhoud van "polldiv" (op dit moment de radiogroup) te vervangen door de vraag met textarea.

Vragen:
  • hoe leeg ik de div zodat ik hem opnieuw kan vullen?
  • wat is het voordeel van DOM boven innerHTML? Ik heb het idee dat innerHTML sneller is (en makkelijker ;))
  • heb je algemene opmerkingen over deze code? Ik hoor het graag!

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 13:26

crisp

Devver

Pixelated

JavaScript:
1
2
while (element.hasChildNodes())
  element.removeChild(element.firstChild);


DOM heeft als voordeel dat het gestandaardiseerd is itt innerHTML. Met de laatste zal je dus eerder tegen implementatie-verschillen aanlopen. Feit is inderdaad dat voor grotere fragments met veel elementen innerHTML een stuk sneller is.

Intentionally left blank


  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
crisp schreef op dinsdag 20 februari 2007 @ 10:15:
JavaScript:
1
2
while (element.hasChildNodes())
  element.removeChild(element.firstChild);
Dat werkt perfect, dank je!
DOM heeft als voordeel dat het gestandaardiseerd is itt innerHTML. Met de laatste zal je dus eerder tegen implementatie-verschillen aanlopen.
Maar hoe groot kunnen die implementatieverschillen nu zijn bij zoiets simpels als een radiogroup en een textarea? Ik wil me graag verdiepen in de DOM, omdat het nu eenmaal de correcte manier is om een html document aan te passen, maar zou graag horen dat ik dan meer voordeel behaal dan het omzeilen van implementatieverschillen. Zijn DOM en innerHTML 100% uitwisselbaar?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 13:26

crisp

Devver

Pixelated

Reveller schreef op dinsdag 20 februari 2007 @ 10:25:
... maar zou graag horen dat ik dan meer voordeel behaal dan het omzeilen van implementatieverschillen.
Voor eenvoudige zaken zoals het toevoegen van een enkel element of het aanpassen van een enkele textNode is de DOM-approach doorgaans wel sneller.
Zijn DOM en innerHTML 100% uitwisselbaar?
Nee, absoluut niet. Voor sommige zaken kan je niet enkel puur met innerHTML uit de voeten of zal je tegen nadelen en/of beperkingen daarvan aanlopen.

Intentionally left blank