Skip to content

Instantly share code, notes, and snippets.

@mmonkey
Created February 19, 2015 15:23
Show Gist options
  • Save mmonkey/af10c394909c3ab5ecbf to your computer and use it in GitHub Desktop.
Save mmonkey/af10c394909c3ab5ecbf to your computer and use it in GitHub Desktop.

Revisions

  1. mmonkey created this gist Feb 19, 2015.
    55 changes: 55 additions & 0 deletions get_classes
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,55 @@
    var cssRules = [];
    var selectors = [];
    var classes = [];
    var results = [];

    // Get all selectors from all styleSheets that aren't undefined
    for(var i = 0; i < document.styleSheets.length; i++) {
    for(var j = 0; j < document.styleSheets[i].cssRules.length; j++) {
    if(typeof document.styleSheets[i].cssRules[j].selectorText !== 'undefined') {
    cssRules.push(document.styleSheets[i].cssRules[j].selectorText);
    }
    }
    }

    // Get all classes from selectors
    for(i = 0; i < cssRules.length; i++) {
    var selectorList = cssRules[i].split(', ');
    for(var j = 0; j < selectorList.length; j++) {
    if(selectorList[j].indexOf('.') === 0) {
    selectors.push(selectorList[j]);
    }
    }
    }

    // Split out nested selectors, remove selectors that contain ::before and ::after
    for(i = 0; i < selectors.length; i++) {
    var selectorList = selectors[i].split(' ');
    for(var j = 0; j < selectorList.length; j++) {
    if(selectorList[j].indexOf('.') === 0) {
    if(selectorList[j].indexOf(':') === -1) {
    classes.push(selectorList[j]);
    }
    }
    }
    }

    classes.sort();

    function uniq(a) {
    var seen = {};
    var out = [];
    var len = a.length;
    var j = 0;
    for(var i = 0; i < len; i++) {
    var item = a[i];
    if(seen[item] !== 1) {
    seen[item] = 1;
    out[j++] = item;
    }
    }
    return out;
    }

    results = uniq(classes);
    console.log(results);