Jquery vs native - selector and element style (v21)

Revision 21 of this benchmark created by Glenn on


Preparation HTML

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>

<ul class='first'>
	<li class='foo'> </li>
	<li class='bar'> </li>
	<li class="bing"> </li>
	<li class="blat"> </li>
		<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
	tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
	quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
	consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
	cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
	proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
	<li class='foo'> </li>
	<div>
		<p></p>
		<p></p>
		<p>
			<div></div>
			<p></p>
			<p>
				<h2></h2>
				<p></p>
				<p></p>
			</p>
		</p>
	</div>
	<li class='bar'> </li>
	<li class="bing"> </li>
	<li class="blat"> </li>
		<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
	tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
	quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
	consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
	cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
	proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
	<li class='foo'> </li>
	<li class='bar'> </li>
	<li class="bing"> </li>
	<li class="blat"> </li>
	<li class='foo'> </li>
	<div>
		<p></p>
		<p></p>
		<p>
			<div></div>
			<p></p>
			<p>
				<h2></h2>
				<p></p>
				<p></p>
			</p>
		</p>
	</div>
	<li class='bar'> </li>
	<li class="bing"> </li>
		<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
	tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
	quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
	consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
	cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
	proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
	<li class="blat"> </li>
	<li class='foo'> </li>
	<li class='bar'> </li>
	<li class="bing"> </li>
	<div>
		<p></p>
		<p></p>
		<p>
			<div></div>
			<p></p>
			<p>
				<h2></h2>
				<p></p>
				<p></p>
			</p>
		</p>
	</div>
	<li class="blat"> </li>
	<li class='foo'> </li>
	<li class='bar'> </li>
	<li class="bing"> </li>
	<li class="blat"> </li>
	<li class='foo'> </li>
		<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
	tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
	quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
	consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
	cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
	proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
	<li class='bar'> </li>
	<li class="bing"> </li>
	<li class="blat"> </li>
		<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
	tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
	quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
	consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
	cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
	proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</ul>

Setup

function hasClass(el, className){
  
  if (el.classList)
    return el.classList.contains(className)
  else
    return new RegExp('(^| )' + className + '( |$)', 'gi').test(el.className)
  }
  
  function selector(selector, callback){
      var els = document.querySelectorAll(selector);
      for (var i = 0; i < els.length; ++i) {
          callback(els[i]);
      }
  }

Teardown



            $('.foo').css('background-color', 'transparent');
  $('.bar').css('background-color', 'transparent');
        
  

Test runner

Ready to run.

Testing in
TestOps/sec
Jquery
$('ul.first')
   .find('.foo')
      .css('background-color', 'red')
.end()
   .find('.bar')
      .css('background-color', 'green')
.end();
ready
native javascript
var e = document.querySelectorAll("ul.first li");

for (var i = 0; i < e.length; ++i) {
    if(hasClass(e[i], 'foo'))
         e[i].style.backgroundColor = 'red';

    if(hasClass(e[i], 'bar'))
         e[i].style.backgroundColor = 'green';
}
ready
native javascript two
var elfoo = document.querySelectorAll("ul.first .foo");
var elbar = document.querySelectorAll("ul.first .bar");

for (var i = 0; i < elfoo.length; ++i) {
    elfoo[i].style.backgroundColor = 'red';
}

for (var i = 0; i < elbar.length; ++i) {
    elbar[i].style.backgroundColor = 'green';
}
ready
native with convenience selector function
selector("ul.first .foo", function(element){
    element.style.backgroundColor = 'red';
});

selector("ul.first .bar", function(element){
    element.style.backgroundColor = 'green';
});
ready
Native 3 - element subselects
var first = document.querySelector("ul.first");

var elfoo = first.querySelectorAll(".foo");
for (var i = 0; i < elfoo.length; ++i) {
    elfoo[i].style.backgroundColor = 'red';
}

var elbar = first.querySelectorAll(".bar");
for (var i = 0; i < elbar.length; ++i) {
    elbar[i].style.backgroundColor = 'green';
}
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.