Loop er nu regelmatig tegenaan dat ik rekening moet houden met (het ontbreken van) whitespace in de DOM. In bijvoorbeeld IE is deze whitespace niet aanwezig, in Firefox wel.
Onderstaand is een oplossing die je bij het doorlopen van de tree of een array kunt gebruiken (bron: http://developer.mozilla.org/en/docs/Whitespace_in_the_DOM)
Maar telkens die functie binnen een lus aanroepen is niet zo efficiënt. Het kan ook in een global variabele worden opgeslagen; zoiets:
En die variabele dan blijven gebruiken, bijvoorbeeld:
Beetje overdreven, maar hopelijk is het zo duidelijk. Ik ben benieuwd hoe jullie dit benaderen en of hier betere oplossingen voor zijn?
Onderstaand is een oplossing die je bij het doorlopen van de tree of een array kunt gebruiken (bron: http://developer.mozilla.org/en/docs/Whitespace_in_the_DOM)
JavaScript:
1
2
3
4
5
6
7
8
9
| function is_all_ws(nod) { // Use ECMA-262 Edition 3 String and RegExp features return !(/[^\t\n\r ]/.test(nod.data)); } function is_ignorable(nod) { return ( nod.nodeType == 8) || // A comment node ( (nod.nodeType == 3) && is_all_ws(nod) ); // a text node, all ws } |
Maar telkens die functie binnen een lus aanroepen is niet zo efficiënt. Het kan ook in een global variabele worden opgeslagen; zoiets:
JavaScript:
1
2
3
| window.onload = function() { excludeWhitespace = is_ignorable(document.getElementsByTagName("body")[0].childNodes[0]); } |
En die variabele dan blijven gebruiken, bijvoorbeeld:
JavaScript:
1
2
3
4
5
6
7
8
| var tabs = getElementsByClassName(ge('content'), 'H2', 'tab'); for(var i = 0; i < tabs.length; i++) { if(excludeWhitespace) { tabs[i].nextSibling.nextSibling.style.display = 'block'; } else { tabs[i].nextSibling.style.display = 'block'; } } |
Beetje overdreven, maar hopelijk is het zo duidelijk. Ik ben benieuwd hoe jullie dit benaderen en of hier betere oplossingen voor zijn?
[ Voor 0% gewijzigd door X-Lars op 06-12-2006 16:56 . Reden: Tweede stuk code was niet goed (ook al was het maar ter illustratie) ]