JSFiddle - React, Tailwind, and code Playground
by finom
HTML
<div data-id="main1234567">
<div>Div</div>
<ul>
<li>ListItem</li>
<li>ListItem</li>
<li>ListItem</li>
<li>ListItem</li>
<li>ListItem</li>
</ul>
<p>Paragraph</p>
<div>Div</div>
<ul>
<li>ListItem</li>
<li>ListItem</li>
<li>ListItem</li>
<li>ListItem</li>
<li>ListItem</li>
</ul>
<p>Paragraph</p>
<ul>
<li>ListItem</li>
<li>ListItem</li>
<li>ListItem</li>
<li>ListItem</li>
<li>ListItem</li>
</ul>
<div>Div</div>
<p>Paragraph</p>
<ul>
<li>ListItem</li>
<li>ListItem</li>
<li>ListItem</li>
<li>ListItem</li>
<li>ListItem</li>
</ul>
<div>Div</div>
<p>Paragraph</p>
<div>Div</div>
<p>Paragraph</p>
<p>Paragraph</p>
<p>Paragraph</p>
<div>Div</div>
<div>Div</div>
<div>Div</div>
<p>Paragraph</p>
<div>Div</div>
<p>Paragraph</p>
<div>Div</div>
<div>Div</div>
<ul>
<li>ListItem</li>
<li>ListItem</li>
<li>ListItem</li>
<li>ListItem</li>
<li>ListItem</li>
</ul>
<div>Div</div>
<p>Paragraph</p>
<div>Div</div>
<p>Paragraph</p>
<p>Paragraph</p>
<ul>
<li>ListItem</li>
<li>ListItem
<ul>
<li>ListItem</li>
<li>ListItem</li>
<li>ListItem</li>
<li>ListItem</li>
<li>ListItem</li>
</ul></li>
<li>ListItem</li>
<li>ListItem</li>
<li>ListItem</li>
</ul>
<p>Paragraph</p>
<div>Div</div>
<div>Div</div>
<ul>
<li>ListItem</li>
<li>ListItem</li>
<li>ListItem</li>
<li>ListItem</li>
<li>ListItem</li>
</ul>
<p>Paragraph</p>
<div>Div</div>
<ul>
<li>ListItem</li>
<li>ListItem</li>
<li>ListItem</li>
<li>ListItem</li>
<li>ListItem</li>
</ul>
<div>Div</div>
...
JavaScript
var count = 10000;
var div = document.querySelector('[data-id="main1234567"]');
var childNodes = div.childNodes;
var length = childNodes.length;
var result = [];
console.time('selector');
for (var i = 0; i < count; i++) {
result = div.querySelectorAll('[data-id="main1234567"] > div');
}
console.timeEnd('selector');
console.time('childNodes');
for (var i = 0; i < count; i++) {
result = [];
loop: for (var j = 0; j < length; j++) {
while (childNodes[j].nodeType !== 1) {
if (++j >= length) break loop;
}
if(childNodes[j].webkitMatchesSelector('div')){
result.push(childNodes[j]);
}
}
}
console.timeEnd('childNodes');