[JS] Element blijft leeg?

Pagina: 1
Acties:
  • 102 views sinds 30-01-2008
  • Reageer

  • J3roen
  • Registratie: Januari 2000
  • Niet online

J3roen

Intentionally left blank

Topicstarter
Ik probeer eigenlijk iets heel eenvoudigs, ik wil de waarde van een element als output naar het scherm sturen. Echter het blijft altijd leeg. Het nodeType wordt echter wel netjes naar het scherm gestuurd (type 3 == tekst). Ik snap echt niet wat ik verkeerd doe.




XML:
1
2
3
<error>
      <msg>Error message test......</msg>
</error>


JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
     function generate_output(xmlDocument, DivID)
      {
        var mainnode;
        var target = document.getElementById(DivID);

        mainnode = xmlDocument.documentElement;
        
        // Check for errors
        if(mainnode.nodeName == 'error') {
            // Error found
            target.innerHTML = "Error: " + mainnode.firstChild.nodeValue;
            alert(mainnode.firstChild.nodeType);
        } else {
            // Do stuff
            alert('No Error');
        }
        
      }

  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 20:31

Gonadan

Admin Beeld & Geluid, Harde Waren
wat voor element probeer je het in te zetten?
Ik gok een div (divID), innerHTML kan namelijk alleen voor elementen met een open- en sluittag.
Ook is innerHTML geen w3 en IE doet dan ook wel eens moeilijk, ook al hebben ze het zelf bedacht. :)

JavaScript:
1
target.appenChild(document.createTextNode('Error: ' + mainnode.firstChild.noveValue));

Misschien lukt het via de (w3) DOM methodes. :)

Edit:
Ik neem aan dat als je
JavaScript:
1
alert(mainnode.firstChild.nodeValue);

doet je wel een waarde terug krijgt? :)

[ Voor 14% gewijzigd door Gonadan op 27-11-2006 22:14 ]

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


  • user109731
  • Registratie: Maart 2004
  • Niet online
MIsschien een lege textnode?

edit: zie nu dat het nodeType 3 is, dat is idd een textnode. Vraag eerst eens je msg element op met mainnode.getElementsByTagName bijv, en doe dan daareens een firstChild.nodeValue op. Nu pak je denk ik een textnode tussen <error> en <msg... ?

[ Voor 89% gewijzigd door user109731 op 27-11-2006 22:18 ]


  • J3roen
  • Registratie: Januari 2000
  • Niet online

J3roen

Intentionally left blank

Topicstarter
Gonadan schreef op maandag 27 november 2006 @ 22:11:

Ik neem aan dat als je
JavaScript:
1
alert(mainnode.firstChild.nodeValue);

doet je wel een waarde terug krijgt? :)
Nope, dan krijg ik ook niets terug. Alleen nodeType geeft wat terug (3).

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

De node die je nu te pakken hebt is de whitespace tussen <error> en <msg> ;)

Intentionally left blank


  • J3roen
  • Registratie: Januari 2000
  • Niet online

J3roen

Intentionally left blank

Topicstarter
Grote prutser schreef op maandag 27 november 2006 @ 22:15:
MIsschien een lege textnode?

edit: zie nu dat het nodeType 3 is, dat is idd een textnode. Vraag eerst eens je msg element op met mainnode.getElementsByTagName bijv, en doe dan daareens een firstChild.nodeValue op. Nu pak je denk ik een textnode tussen <error> en <msg... ?
Ik ben echt een noob, en kan zo even snel niet zien hoe ik met getElementsByTagName kan werken.
Maar hoe kan hij iets tussen <error> en <msg> pakken? Er staat immers niets? Vaag probleem :(

  • J3roen
  • Registratie: Januari 2000
  • Niet online

J3roen

Intentionally left blank

Topicstarter
crisp schreef op maandag 27 november 2006 @ 22:24:
De node die je nu te pakken hebt is de whitespace tussen <error> en <msg> ;)
Uhm.. Dus JS ziet WS als een node? LOL. Waarom in godsnaam? ;)

  • user109731
  • Registratie: Maart 2004
  • Niet online
Er staat wel wat, er zit een verschil tussen:
XML:
1
2
3
<error>
      <msg>Error message test......</msg>
</error>

en
XML:
1
<error><msg>Error message test......</msg></error>

Oftewel: de whitespace (spaties ed) word ook gewoon een textnode. :)
Zoiets zal vast wel werken:
JavaScript:
1
2
var msg = mainnode.getElementsByTagName('msg')[0];
alert(msg.firstChild.nodeValue); 

edit:
CRiSiS schreef op maandag 27 november 2006 @ 22:29:
[...]


Uhm.. Dus JS ziet WS als een node? LOL. Waarom in godsnaam? ;)
Het idee is denk ik dat de DOM het oorspronkelijke element zoveel mogelijk reflecteert, en het is ook nodig voor white-space:pre ed...

[ Voor 28% gewijzigd door user109731 op 27-11-2006 22:33 ]


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

CRiSiS schreef op maandag 27 november 2006 @ 22:29:
[...]


Uhm.. Dus JS ziet WS als een node? LOL. Waarom in godsnaam? ;)
http://developer.mozilla.org/en/docs/Whitespace_in_the_DOM

En IE doet daar inderdaad niet aan, maar daarom is het ook IE.
Voor een goede oplossing van je probleem zie de post van Grote Prutser boven mij ;)

Intentionally left blank


  • J3roen
  • Registratie: Januari 2000
  • Niet online

J3roen

Intentionally left blank

Topicstarter
Grote prutser schreef op maandag 27 november 2006 @ 22:30:
Zoiets zal vast wel werken:
JavaScript:
1
2
var msg = mainnode.getElementsByTagName('msg')[0];
alert(msg.firstChild.nodeValue); 
Dat werkt inderdaad. Alleen wat ik daarvan niet begrijp is, waarom moet je alsnog firstChild gebruiken?
Ik zou verwachten dat getElementsByTagName('msg')[0].nodeValue al voldoende zou zijn omdat je al "in" dat element zit.

Ik neem aan det getElementsByTagName een array teruggeeft (vandaar de [0]), van alle gevonden elementen?

Is er, net als de PHP/Perl manual, een lijst van standaard JS functies met de verwachtte input en de output?

Ik ben druk aan het leren, excuse my noobnish ;)

[ Voor 8% gewijzigd door J3roen op 27-11-2006 22:49 ]


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

CRiSiS schreef op maandag 27 november 2006 @ 22:45:
[...]


Dat werkt inderdaad. Alleen wat ik daarvan niet begrijp is, waarom moet je alsnog firstChild gebruiken?
Ik zou verwachten dat getElementsByTagName('msg')[0].nodeValue al voldoende zou zijn omdat je al "in" dat element zit.
Nee, getElementsByTagName('msg')[0] is het msg-element, da's een nodeType 1 (ElementNode)
Ik neem aan det getElementsByTagName een array teruggeeft (vandaar de [0]), van alle gevonden elementen?
getElementsByTagName geeft een element-collection terug (of beter gezegd: een live nodeList) - da's iets anders dan een array ;)
Is er, net als de PHP/Perl manual, een lijst van standaard JS functies met de verwachtte input en de output?
Voor JS zelf vind ik de oude devedge en de documentatie op mozilla.org zeer goed. Note dat dit niet ingaat op implementatie-verschillen tussen browsers.
Vwb specifiek DOM ken ik niet zo 1-2-3 een echt goede reference buiten de technische specificaties op w3.org
Ik ben druk aan het leren, excuse my noobnish ;)
NP, je komt er wel ;)

Intentionally left blank


  • Crayne
  • Registratie: Januari 2002
  • Laatst online: 17-03 13:41

Crayne

Have face, will travel

Voor DOMme zaken gebruik ik deze vaak: http://www.quirksmode.org/dom/compatibility.html ;)

Mijn Library Thing catalogus

Pagina: 1