[thelist] DOM: previousSibling and LI tags
Howard Jess
howard at dhitechnologies.com
Fri Jan 20 11:23:33 CST 2006
VOLKAN ÖZÇELİK wrote:
> To be on the safe side, you can sweep all empty text nodes of interest
> before navigating through the node tree.
>
> sample code:
>
> var _this=_DOMManager.prototype;
> function _DOMManager(){}
>
> _this.sweep=function(obj){
> if(!obj)obj=document;
> var children=obj.childNodes;
>
> for(var j=0;j<children.length;j++){
> //if node is a text node and it conists of only whitespace
> if(children[j].nodeType==3&&/^\s*$/.test(children[j].nodeValue))
> children[j].parentNode.removeChild(children[j]);
>
> if(children[j])this.sweep(children[j]);
> }
Better to go backwards through the list of childNodes, as it's "live". If
you have childNodes
0: whitespace-text1
1: li-1 (with its own childNodes)
2: whitespace-text2
3: whitespace-text3
4: li-2
etc., then when you remove childNodes[0], all the rest move up, and you
won't even see li-1: childNodes[1] will be whitespace-text2. Remove it,
and childNodes[2] will be li-2. Instead (untested, but illustrative):
sweep = function(obj) {
if (!obj) obj=document;
var children=obj.childNodes;
for (var j = children.length-1; j >= 0; j--) {
// if node is a whitespace-only text node
if (children[j].nodeType==3 && /^\s*$/.test(children[j].nodeValue))
obj.removeChild(children[j]);
else if (children[j].hasChildNodes())
sweep(children[j]);
}
}
hj
More information about the thelist
mailing list