Skip to content

Instantly share code, notes, and snippets.

@abhidilliwal
Last active February 29, 2016 09:44
Show Gist options
  • Select an option

  • Save abhidilliwal/4df57e1041f43e6e6793 to your computer and use it in GitHub Desktop.

Select an option

Save abhidilliwal/4df57e1041f43e6e6793 to your computer and use it in GitHub Desktop.

Revisions

  1. abhidilliwal revised this gist Feb 29, 2016. No changes.
  2. abhidilliwal created this gist Feb 29, 2016.
    19 changes: 19 additions & 0 deletions querySelectorPerf.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,19 @@
    // source/credits: https://github.com/madrobby/zepto/blob/master/src/zepto.js

    // usage query(document.body, '.cls .childrens')
    function query(element, selector){
    var found,
    maybeID = selector[0] == '#',
    maybeClass = !maybeID && selector[0] == '.',
    nameOnly = maybeID || maybeClass ? selector.slice(1) : selector, // Ensure that a 1 char tag name still gets checked
    isSimple = /^[\w-]*$/.test(nameOnly);
    return (element.getElementById && isSimple && maybeID) ? // Safari DocumentFragment doesn't have getElementById
    ( (found = element.getElementById(nameOnly)) ? [found] : [] ) :
    (element.nodeType !== 1 && element.nodeType !== 9 && element.nodeType !== 11) ? [] :
    [].slice.call(
    isSimple && !maybeID && element.getElementsByClassName ? // DocumentFragment doesn't have getElementsByClassName/TagName
    maybeClass ? element.getElementsByClassName(nameOnly) : // If it's simple, it could be a class
    element.getElementsByTagName(selector) : // Or a tag
    element.querySelectorAll(selector) // Or it's not simple, and we need to query all
    );
    }