тока так:
<html>
<head>
</head>
<body>
leftTextNode<div>text node</div>rightTextNode
<script>
(function(){
var els = document.getElementsByTagName('*'),
all = [];
for(var i = 0; els[ i ]; i++ ) {
if ( els[ i ].previousSibling && els[ i ].previousSibling.nodeType !== 1 ) {
all.push( els[ i ].previousSibling );
}
all.push( els[i] );
if ( els[ i ].firstChild && els[ i ].firstChild.nodeType !== 1 && els[ i ].childNodes.length === 1 ) {
all.push( els[ i ].firstChild );
}
}
alert(all.length);
}());
</script>
</body>
</html>
Так у них и сортировка правильная, можно конечно сделать и проще, но не будет гарантии верной сортировки.