Toon posts:

[JavaScript] Array's van objecten in IE

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

Verwijderd

Topicstarter
Hallo,

voor een schoolproject ben ik bezig aan de volgende site:

http://www.doylledesign.com/maxart/

Maar, telkens in document.getElementsByTagName('tagname') gebruik, gaat het mis.

zo heb ik twee scripts waar ik dit gebruiken bijde lopen erop vast.
Het eerste script is om de Title uit te lezen, en deze als breadcrumb ergens in de pagina te plaatsen.

dit is de code:
JavaScript:
1
2
3
4
5
6
function breadcrumb()
{   
    oTitle = new Array();
    oTitle = document.getElementsByTagName('title');
    document.getElementById('breadcrumb').lastChild.nodeValue = "" + oTitle[0].lastChild.nodeValue;
}


het stuk getElementsByTagName werkt nog ok, want als ik de TagName van oTitle[0] opvraag geeft hij mooi TITLE weer. Maar vraag ik de lastChild.nodeValue op, dan geeft hij de foutmelding "Object Verijst". Ik heb op O'REILLY JavaScript Reference en W3Schools gekeken, maar daar kon ik niets vinden (omdat IE het W3C hier niet volgt denk ik).

Kan iemand mij hier helpen?

Alvast bedankt

[ Voor 9% gewijzigd door Verwijderd op 29-04-2006 17:25 ]


Verwijderd

is dat breadcrumb element leeg? in dat geval heeft ie geen child nodes (geen text nodes), dus dan gaat het daar mis.

verder mist er een ";"

[ Voor 11% gewijzigd door Verwijderd op 29-04-2006 17:10 ]


Verwijderd

Topicstarter
de breadcrumb is niet leeg, er staat inderdaad al een stukje tekst, om ervoor te zorgen dat er een textNode aanwezeg is.

en idd, ; vergeten, maar die zijn toch niet echt verplicht?(niettegenstaande het correcter is om ze er wel te zetten, dus 'k zal ze aanpassen op m'n beginpost)

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:32

crisp

Devver

Pixelated

Vreemd; oTitle[0].childNodes.length geeft 0 in IE. innerHTML geeft wel de title terug, en als ander alternatief zou je nog document.title kunnen gebruiken.
Dit is clearly een bug though.

Intentionally left blank


Verwijderd

Topicstarter
crisp schreef op zaterdag 29 april 2006 @ 18:25:
Vreemd; oTitle[0].childNodes.length geeft 0 in IE. innerHTML geeft wel de title terug, en als ander alternatief zou je nog document.title kunnen gebruiken.
Dit is clearly een bug though.
jo, bedankt man. document.title werkt perfect.

Heb nu wel het zelfde probleem met document.getElementById('...').appendChild(oDiv)
krijg iedentiek dezelfde foutmelding (object vereist)

bah, ik word er zot van.

toch bedankt!

  • funkwurm
  • Registratie: December 2005
  • Laatst online: 22-02-2021
ik gebruik altijd
JavaScript:
1
document.getElementById('some').innerHTML+='<div>Deze div komt erachter</div>';

Maar ik zou me voor kunnen stellen dat je dat niet orthodox genoeg vindt ;)

  • André
  • Registratie: Maart 2002
  • Laatst online: 20-02 09:23

André

Analytics dude

Het nadeel daarvan is dat hij de complete innerHTML van 'some' opnieuw set, en daar wordt je niet altijd blij van ;)

Verwijderd

Topicstarter
funkwurm schreef op zaterdag 29 april 2006 @ 21:20:
ik gebruik altijd
JavaScript:
1
document.getElementById('some').innerHTML+='<div>Deze div komt erachter</div>';

Maar ik zou me voor kunnen stellen dat je dat niet orthodox genoeg vindt ;)
hmm, het probleem zit em eigenlijk al voor het stuk appendChild (of innerHTML, wat ongeveer hetzelfde doet juist?)
Al bij document.getElementById('...') gaat het mis. als ik hiervan de tagname of het object opvraag, geeft hij al een foutmelding...

Verwijderd

Is het niet gewoon zo dat je die functie aanroept voordat het element (dat je via zijn id probeert te vinden) is aangemaakt?
Het is zo dat de HTML engine direct na de </script> tag even pauzeert, en de JS engine de tijd geeft om iets te doen. Pas daarna zou de HTML engine weer verder mogen.
offtopic:
Dit is te controleren door in een script blok de DOM tree weer te geven. Het laatst toegevoegde element is dan het script element dat de javascript code bevat die uitgevoerd wordt. In principe kun je in een javascript blok code zetten die het script element vervangt door iets anders.

Ik vermoed dat je je functie aanroept vóórdat het target element bestaat. En dan krijg je dus je 'object expected', wat in feite gewoon een soort NullPointerException is, in dit geval.

[edit]
JavaScript:
1
oTitle = new Array();

Die regel slaat eigenlijk nergens op, en kun je net zo goed weglaten. De volgende regel kun je eventueel met var oTitle = beginnen, om oTitle een lokale variabele te maken ipv. een globale.

[ Voor 15% gewijzigd door Verwijderd op 30-04-2006 13:20 ]

Pagina: 1