PDA

View Full Version : [Javascript] manipolazione DOM


biowep
28-01-2012, 11:30
http://www.w3schools.com/dom/books.xml
vorrei partire dalla lista nodi di elementi <book> per arrivare al primo nodo del primo elemento e scriverne il testo contenuto ("Everyday Italian")

http://www.w3schools.com/dom/tryit.asp?filename=try_dom_getelementsbytagname

<html>
<head>
<script type="text/javascript" src="loadxmldoc.js"></script>
</head>
<body>

<script type="text/javascript">
xmlDoc=loadXMLDoc("books.xml");
document.write(xmlDoc.getElementsByTagName("book")[0].childNodes[0].childNodes[0].nodeValue);
</script>

</body>
</html>

in pratica il prendo tutti gli elementi aventi tag name book, da questa lista prendo il primo [0] da questo elemento prendo il primo figlio childNodes[0] (che dovrebbe essere il primo tag <title>), da questo tag prendo il contenuto, cioè il suo primo figlio (che dovrebbe essere il testo "Everyday Italian") e quindi lo scrivo .nodeValue

ma non funziona, dove sbaglio?

ESSE-EFFE
28-01-2012, 14:04
ma non funziona, dove sbaglio?
A me quel codice funziona... perchè dici di no? Cosa ottieni?

biowep
28-01-2012, 16:59
A me quel codice funziona... perchè dici di no? Cosa ottieni?
NON ottengo Everyday Italian
il codice che ti compare li all'inizio non è quello che ho scritto io
devi soprascrivere e fare Edit and Click Me >>

ESSE-EFFE
29-01-2012, 07:40
NON ottengo Everyday Italian
Sì questo l'avevo capito, ma cosa ottieni?

il codice che ti compare li all'inizio non è quello che ho scritto io devi soprascrivere e fare Edit and Click Me >>
Ovvio che l'ho fatto, intendevo dire che il tuo codice funziona...

biowep
29-01-2012, 10:13
Sì questo l'avevo capito, ma cosa ottieni?


Ovvio che l'ho fatto, intendevo dire che il tuo codice funziona...
mi sembra impossibile
io non ottengo niente, la pagina rimane bianca
e nella console (Google Chrome) mi da un errore:
Uncaught TypeError: Cannot read property 'nodeValue' of undefined - tryit_view.asp:9

mi sembra incredibile ma con IE9 anche a me va
chissà perché

Invece su Opera l'errore è diverso (ed anche li ottengo una pagina bianca):
Uncaught exception: TypeError: Cannot convert 'xmlDoc.getElementsByTagName("book")[0].childNodes[0].childNodes[0]' to object

ESSE-EFFE
29-01-2012, 12:55
mi sembra impossibile
mi sembra incredibile ma con IE9 anche a me va
Come vedi, non era affatto impossibile... dipende dal browser. Ti conviene "spezzare" come fanno loro, probabilmente è una soluzione più universale.

biowep
29-01-2012, 15:12
Come vedi, non era affatto impossibile... dipende dal browser. Ti conviene "spezzare" come fanno loro, probabilmente è una soluzione più universale.
ho scoperto l'errore
http://www.w3schools.com/dom/dom_mozilla_vs_ie.asp
Internet Explorer will NOT treat empty white-spaces, or new lines as text nodes, while other browsers will.
quindi il codice per altri browser dovrebbe essere
document.write(xmlDoc.getElementsByTagName("book")[0].childNodes[1].childNodes[0].nodeValue);
prendo il primo elemento <book> [0], prendo il suo SECONDO figlio [1] (il primo è uno spazio bianco) e prendo il suo primo figlio [0] ovvero il suo contenuto

se per caso fosse
<title lang="en">
Everyday Italian
</title>
allora anche in quel caso avrei dovuto prendere anche la seconda volta il SECONDO figlio [1]

non so cosa ne pensiate voi ma in questo caso specifico mi sembra più corretta l'interpretazione di IE a prescindere dalle specifiche
non ha senso prendere come elementi spazi e righe vuote che in html non hanno significato


cmq cosa intendi con "spezzare"?
vorrei rilevare i figlia alla maniera di internet explorer cioè saltando spazi e righe vuote