милт, если нужны пустые TEXT_NODE убрать && el.data.replace(/\s/g,'')
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<script>
window.onload =
function(){
var arrAll = [];
function getEls(el) {
var chNodes,
i;
if(el.childNodes.length == 0 && el.nodeType == 1|| el.nodeType == 3 && el.data.replace(/\s/g,'')) arrAll.push(el);
else {
chNodes = el.childNodes;
for (i = 0; i < chNodes.length; i++) {
getEls(chNodes[i]); // вызываем рекурсивно
}
}
}
getEls(document.body);
alert(arrAll.length)
};
</script>
</head>
<body>
<div>
<a></a> <!-- 1 -->
</div>
<ul>
<li>1</li> <!-- 2 -->
</ul>
</body>
</html>