Jquery vs native - selector and element style (v20)

Revision 20 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)
    el.classList.contains(className)
  else
    new RegExp('(^| )' + className + '( |$)', 'gi').test(el.className)
  
  }
  
  function selector(selector, callback){
      var els = document.querySelector(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
native javascript
var e = document.querySelector("ul.first");

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.querySelector("ul.first .foo");
var elbar = document.querySelector("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) {
    elfoo[i].style.backgroundColor = 'green';
}
ready
Jquery
$('ul.first')
   .find('.foo')
      .css('background-color', 'red')
.end()
   .find('.bar')
      .css('background-color', 'green')
.end();
ready

Revisions

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