jQuery vs. DOM: finding checked checkboxes (v3)

Revision 3 of this benchmark created on


Preparation HTML

<script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js">
</script>
<form id="someForm">
  <input type="checkbox" />
  <input type="checkbox" />
  <input type="checkbox" checked/>
  <input type="checkbox" checked/>
  <input type="checkbox" />
  <input type="checkbox" checked/>
  <input />
  <input />
  <input />
  <input />
  <input />
</form>

Setup

// utility function
    window.toArray = function(obj) {
      var arr = [];
      for (var i = 0, len = obj.length; i < len; i++) {
        arr[i] = obj[i];
      }
      return arr;
    }

Test runner

Ready to run.

Testing in
TestOps/sec
DOM
var form = document.getElementById("someForm");

var checked = toArray(form.elements).some(function(el) {
  return el.type === "checkbox" && el.checked;
});
ready
jQuery 1 - nonstandard selectors
$(':checkbox:checked', '#someForm').length;
 
ready
jQuery 2 - document.forms.elements + filter
$(document.forms[0].elements).filter(':checked').length
ready
jQuery 3 - document.forms + find [attr] + filter
$(document.forms[0]).find('[type="checkbox"]').filter(':checked').length
ready
jQuery 4 - document.forms + find tag[attr] + filter
$(document.forms[0]).find('input[type="checkbox"]').filter(':checked').length
ready
jQuery 4 - document.forms + find tag + filter
$(document.forms[0]).find('input').filter(':checked').length
ready
jQuery 5 - descendant selector + filter
$('#someForm input').filter(':checked').length
ready
jQuery 6 - id selector + find + filter
$('#someForm').find('input').filter(':checked').length
ready
jQuery 7 - tag selector + filter
$('input').filter(':checked').length
ready
Hybrid 1 - getElementsByTagName + filter
var selection = document.getElementsByTagName('input');

$(selection).filter(':checked').length
ready
Hybrid 2 - getElementById + getElementsByTagName + filter
var selection = document.getElementById('someForm');
selection = selection.getElementsByTagName('input');

$(selection).filter(':checked').length
ready

Revisions

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