Archief - JS: IE en DOM model

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

maatje

Legacy Member
ik wil mijn tekst in h1 zetten, in Firefox werkt het perfect maar hoe kun je nou verklaren waarom IE7 een foutmelding zet op deze code

Code:
kop = document.createElement('h1');
kop.appendChild(document.createTextNode("Mijn mandje"));
div.appendChild(kop);

L0|2|23

Legacy Member
Het kan aan verschillende dingen liggen, mijn gok is dat je bij het appenden aan de 'div' een object aanspreekt dat (in IE) nog niet in de DOM geladen is. Probeer je functie eens uit te voeren mbv. body onload="init()".

Nog een redelijk belangrijke coding practice is dat je strings consequent aanmaakt met enkelvoudige aanhalingstekens (<'> en niet <">).

Smoerf

Legacy Member
div, wat is div? waar is dat gedeclareerd?

En waar roep je dit aan? In een functie? In je body? In je init?

L0|2|23

Legacy Member
Smoerf zei:
div, wat is div? waar is dat gedeclareerd?

En waar roep je dit aan? In een functie? In je body? In je init?

Wel in je code staat toch div.appendChild? Dat object moet je toch ergens aangemaakt hebben (wss iets in de aard van var div = document.getElementById('hierinkomthetmandje');). Het probleem is dat je document nog niet mag aanspreken totdat de DOM ingeladen is. Vandaar dat ik voorstelde om het mbv body onload="init();" te doen. Zet je code dus in een function init() {} en copy paste die onload tag naar je body. Zie eens of het dan werkt. Anders dan is het die 'div' die je nog niet hebt aangemaakt. Als je merkt dat het met onload werkt, raad ik je aan om een onDOMReady() functie op te zoeken (die start veel vroeger dan onload en staat ook los van je html code).

Smoerf

Legacy Member
@ LO|2|23: er staat div.appendChild maar nergens in zijn code zie ik wat div is. Dus, vraag is wat hij in de variabele div stopt en vooral, waar hij dit doet. Bestaat die DOM node wel?

een domready functie is wss wel een goede oplossing maar ik denk dat het in dit geval niet veel verschil zal uitmaken.

Heb je trouwens de pagina online staan?

L0|2|23

Legacy Member
Als je op een object .appendChild aanroept, is er al ten eerste een eis dat dat object deel uitmaakt van de DOM tree. Je hebt twee mogelijkheden, ofwel maak je met javascript die 'div' aan, ofwel haal je die uit je bestaande tree gedefinieerd door je html (dit is wat ik denk dat jij wil doen). De onderstaande code zou dit duidelijk moeten maken.

Code:
<html>
<head>
...
<script type="text/javascript">
    function voegkoptoe() {
        var kop = document.createElement('h1');
        kop.appendChild(document.createTextNode('Mijn mandje'));
        var div = document.getElementById('foo');
        div.appendChild(kop);
        // de volgende regel zou equivalent geweest zijn aan de vorige twee regels: document.getElementById('foo').appendChild(kop);
    }
</script>
</head>
<body onload="voegkoptoe();">
    ...
    <div id="foo"></div>
</body>
</html>

EDIT
Ik heb de code ff getest voor de veiligheid. Als je deze code gewoon zou copypasten in een file en de '...' regels weg zou doen, zou die zonder meer werken. Pas dus je eigen html aan met deze code (het is wel aangeraden om in je uiteindelijke site gebruik te maken van externe js en css bestanden).

Smoerf

Legacy Member
Om toch maar te muggeziften en code / opmaak / inhoud volledig gescheiden te houden, mss die voegkoptoe ook nog in je js zetten ;)

L0|2|23

Legacy Member
Smoerf zei:
Om toch maar te muggeziften en code / opmaak / inhoud volledig gescheiden te houden, mss die voegkoptoe ook nog in je js zetten ;)

Ja dat zei ik toch onder EDIT in mijn vorige post? :oink:

Tzal wel in orde zijn nu neemk aan :p

Lol k, ik kon al helemaal niet meer volgen ma kweet al waarom, kdacht da gij (smoerf) de vraag had gesteld ma tis nen andere die nog nix heeft gezegd in deze thread:p Kvond het al extreeeeem raar da ge zo vroeg van "div, div wat is div?" kdacht toen dus da da u code was :p, zou wel seniel geweest zijn.. ma ok dus dit was allemaal voor nix :D

Smoerf

Legacy Member
L0|2|23 zei:
Lol k, ik kon al helemaal niet meer volgen ma kweet al waarom, kdacht da gij (smoerf) de vraag had gesteld ma tis nen andere die nog nix heeft gezegd in deze thread:p Kvond het al extreeeeem raar da ge zo vroeg van "div, div wat is div?" kdacht toen dus da da u code was :p, zou wel seniel geweest zijn.. ma ok dus dit was allemaal voor nix :D


Ik ben wel seniel, ma zo seniel ben ik wel niet :D
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan