потому что строка, состоящая из пробелов - это true
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<div> </div> <p> </p> <p> </p> 123
<script language="JavaScript" type="text/javascript">
alert( document.getElementsByTagName('div')[0].nextSibling ); // object text
function normalize(element) {
var children = element.childNodes;
var textNodes = [];
for( var i=0, n=children.length; i<n; i++ ){
var child = children[i];
if( isEmptyTextNode(child) )
textNodes.push( child );
else if( child.hasChildNodes() )
normalize(child);
}
for( var i=0, n=textNodes.length; i<n; i++ ){
var textNode = textNodes[i];
textNode.parentNode.removeChild( textNode );
}
function isEmptyTextNode( node ){
return node.nodeType == 3 &&
! node.nodeValue.replace(/\s+/, '');
}
}
normalize(document.body);
alert( document.getElementsByTagName('div')[0].nextSibling ); /// object text
</script>
</body>
</html>
Octane, зачем цикл в функцию заворачивать?