Test case details

Preparation Code

var html =     "<div> \       <div> \         <span>a</span> \         <span>b</span> \         <span>c</span> \         <span>d</span> \       </div> \       <div> \         <span>a</span> \         <span>b</span> \         <span>c</span> \         <span>d</span> \       </div> \       <div> \         <span>a</span> \         <span>b</span> \         <span>c</span> \         <span>d</span> \       </div> \       <div> \         <span>a</span> \         <span>b</span> \         <span>c</span> \         <span>d</span> \       </div> \     </div>".replace(/[\s\r\n\t]+/g,"");         var div = document.createElement("div");     div.innerHTML = html;         function toVDOM(div) {           var type = div.nodeType;             if (type === 1) {         return {           nodeType: type,           nodeName: div.nodeName,           childNodes: Array.prototype.map.call(div.childNodes, toVDOM)         };       } else if (type === 3) {         return {           nodeType: type,           nodeValue: div.nodeValue,           childNodes: []         };       } else {         return {           nodeType: type         };       }     }         var vdiv = toVDOM(div);         function walk(node) {       if (node.nodeType === 1 && node.childNodes.length)       for (var i = node.childNodes.length; i--;) walk(node.childNodes[i]);     }         function walkDOM(node) {       if (node.nodeType === 1) {           var current = node.firstChild;           while (current) {                   walkDOM(current);                   current = current.nextSibling;           }       }     }

Test cases

Test #1

div.firstChild;  

Test #2

div.firstChild.firstChild;

Test #3

div.firstChild.firstChild.firstChild;

Test #4

walkDOM(div);

Test #5

vdiv.childNodes[0];

Test #6

vdiv.childNodes[0].childNodes[0];

Test #7

vdiv.childNodes[0].childNodes[0].childNodes[0];

Test #8

walk(vdiv);