anoniem Geplaatst: 27 augustus 2003 Delen Geplaatst: 27 augustus 2003 Na een aantal lussen gaat het fout bij het volgende stukje script:[code:1:6799fd1e5f] h2[i].onclick = function(){ sib = this.nextSibling; if(sib.style.display == "block"){ sib.style.display = "none" } else{ sib.style.display = "block" } }[/code:1:6799fd1e5f]Als ik met alert(sib); probeer uit te vinden wat het volgende elememnt is krijg ik terug dat het text betreft. Dit zou daarentegen gewoon een ander element moeten zijn. In Internet Explorer werkt alles naar verwachten, maar Mozilla lijkt de tussenliggende whitespace niet te waarderen. Als ik het namelijk op een element uittest waar geen whitespace omheen zit (dus de siblings zitten tegen elkaar aan) werkt het prima. Is er een manier om van tevoren die whitespace weg te halen of is er misschien een parameter die ervoor zorgt dat de eventuele whitespace wordt genegeerd? Anne Quote Link naar reactie
anoniem Geplaatst: 27 augustus 2003 Auteur Delen Geplaatst: 27 augustus 2003 Je zou aan de hand van de nodeType eigenschap kunnen kijken of de nextSibling een textnode (nodeType = 3) of een element (nodeType = 1)is. Als de nextSibling een textnode is, ga je gewoon door naar de nextSibling van die textnode. Zo zou het moeten werken: [code:1:7ef3886b2f] h2[i].onclick = function(){ var sib = this.nextSibling; while(sib.nodeType == 3){ sib = sib.nextSibling; } if(sib.style.display == "none"){ sib.style.display = "block" } else{ sib.style.display = "none" } } [/code:1:7ef3886b2f] Quote Link naar reactie
anoniem Geplaatst: 27 augustus 2003 Auteur Delen Geplaatst: 27 augustus 2003 Dat werkt perfect. Nu heb ik helaas een ander probleempje dat waarschijnlijk wel op te lossen op een soort zelfde manier.[code:1:d3f552d17f] h2.item(0).nextSibling.style.display = "none"; // about h2.item(1).nextSibling.style.display = "none"; // calendar h2.item(2).nextSibling.style.display = "block"; // sections h2.item(3).nextSibling.style.display = "block"; // chapters h2.item(4).nextSibling.style.display = "none"; // search h2.item(5).nextSibling.style.display = "none"; // meta[/code:1:d3f552d17f]Hier wordt dus niet geloopt maar gewoon direct aangesproken. Hier gaat dus (nu) nog het een en ander de mist in. Misschien een soort functie maken voor het aanroepen van nextSibling? Anne Quote Link naar reactie
anoniem Geplaatst: 27 augustus 2003 Auteur Delen Geplaatst: 27 augustus 2003 Mooi opgelost, bedankt voor de inspiratie. Functie:[code:1:f059109b1d]function nextSib(number,noneblock){ if(!document.getElementsByTagName) return false; var h2 = document.getElementById('menu').getElementsByTagName("h2"); var sib = h2.item(number).nextSibling; while(sib.nodeType == 3){ sib = sib.nextSibling; } sib.style.display = noneblock; }[/code:1:f059109b1d]Aanroep:[code:1:f059109b1d] nextSib("0","none"); // about[/code:1:f059109b1d]Anne Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen