Micro selector libraries (v13)

Revision 13 of this benchmark created on


Preparation HTML

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

<div id="iddiv">
  <div class="inside"></div>
  <div class="inside"></div>
</div>
<div class="classdiv"></div>
<script>

// James Doyle - original regex version
window.regex$ = function(selector) {
  var matches = {
    '#': 'getElementById',
    '.': 'getElementsByClassName',
    '@': 'getElementsByName',
    '=': 'getElementsByTagName',
    '?': 'querySelectorAll'
  };
  var regex = /[=#@.*]/.exec(selector)[0];
  return (document[matches[regex]](selector.split(regex)[1]));
};
// Michał Wachowski
window.michal$ = function(s) {
    return document[{
        '#': 'getElementById',
        '.': 'getElementsByClassName',
        '@': 'getElementsByName',
        '=': 'getElementsByTagName'}[s[0]]
        || 'querySelectorAll'](s.slice(1))
};
// Tomasz Żełudziewicz
window.tomasz$ = function(s) {
    try {return document[{
        '#': 'getElementById',
        '.': 'getElementsByClassName',
        '@': 'getElementsByName',
        '=': 'getElementsByTagName',
        '?': 'querySelectorAll'
    }[s[0]]](s.slice(1));}catch(e){}
};
window.$$$$ = function(s) {
    try {return document[[s[0]]](s.slice(1));}catch(e){}
};

// Mark Knol
var _matches = {
	'#': document.getElementById,
	'.': document.getElementsByClassName,
	'@': document.getElementsByName,
	'=': document.getElementsByTagName,
	'?': document.querySelectorAll
}

window.$$$$$ = function(selector) {
  return (_matches[selector[0]].call(document, selector.slice(1)));
};

window.switch$ = function(selector) {
  var key = selector[0];
  switch(key)
  {
	case '#': return document.getElementById(selector.slice(1)); break;
	case '.': return document.getElementsByClassName(selector.slice(1)); break;
	case '@': return document.getElementsByName(selector.slice(1)); break;
	case '=': return document.getElementsByTagName(selector.slice(1)); break;
	case '?': return document.querySelectorAll(selector.slice(1)); break;
  }
  return null;
};

window.if$ = function(selector) {
  var key = selector[0];
  if(key === '#') return document.getElementById(selector.slice(1));
	if(key === '.') return document.getElementsByClassName(selector.slice(1));
	if(key === '@') return document.getElementsByName(selector.slice(1));
	if(key === '=') return document.getElementsByTagName(selector.slice(1));
	if(key === '?') return document.querySelectorAll(selector.slice(1)); 
  return null;
};

// Shortcut version by Indloon
window.elementByClass = function(string) { return document.getElementsByClassName(string); };
window.elementById = function(string) { return document.getElementById(string); };
window.elementByTag = function(string) { return document.getElementsByTagName(string); };
window.elementByName = function(string) { return document.getElementsByName(string); };
window.queryElement = function(string) { return document.querySelectorAll(string); };


// drp
var w = window, d = document;
w.drp$ = function(selector) {
  var matches = {
    '#': 'getElementById',
    '.': 'getElementsByClassName',
    '@': 'getElementsByName',
    '=': 'getElementsByTagName',
    '?': 'querySelectorAll'
  };
  var regex = /[=#@.*]/.exec(selector)[0];
  return (d[matches[regex]](selector.split(regex)[1]));
};


</script>

Test runner

Ready to run.

Testing in
TestOps/sec
Original regex
regex$('#iddiv');
regex$('.classdiv');
regex$('?div .inside');
ready
return string[0] in document
michal$('#iddiv');
michal$('.classdiv');
michal$('?div .inside');
ready
try/catch return
tomasz$('#iddiv');
tomasz$('.classdiv');
tomasz$('?div .inside');
ready
document gets
document.getElementById('iddiv');
document.getElementsByClassName('classdiv');
document.getElementsByTagName('div')[0].getElementsByClassName('inside');
ready
querySelector
document.querySelectorAll('#iddiv');
document.querySelectorAll('.classdiv');
document.querySelectorAll('div .inside');
ready
switch statement
switch$('#iddiv');
switch$('.classdiv');
switch$('?div .inside');
ready
if statement
if$('#iddiv');
if$('.classdiv');
if$('?div .inside');
ready
Shortcuts
elementById("iddiv");
elementByClass("classdiv");
elementByTag("div")[0].getElementsByClassName("inside");
ready
jQuery
$("#iddiv");
$(".classdiv");
$("div.inside");
ready
drp
drp$('#iddiv');
drp$('.classdiv');
drp$('?div .inside');
ready

Revisions

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