// polyfill window.getMatchedCSSRules() if ( typeof window.getMatchedCSSRules !== 'function' ) { //TODO: not supporting 2nd argument for selecting pseudo elements //TODO: not supporting 3rd argument for checking author style sheets only global.getMatchedCSSRules = function (element /*, pseudo, author_only*/) { var style_sheets, sheet, sheet_media, rules, rule, result = []; // get stylesheets and convert to a regular Array style_sheets = [].slice.call(window.document.styleSheets); while ( sheet = style_sheets.shift() ) { sheet_media = sheet.media; // if this sheet is disabled skip it if ( sheet.disabled ) continue; // if this sheet's media is specified and is NOT all or screen then skip it if ( sheet_media.length && ! (~ sheet_media.indexOf('screen') || ~ sheet_media.indexOf('all')) ) continue; // get the style rules of this sheet rules = [].slice.call(sheet.cssRules); // loop the rules while ( rule = rules.shift() ) { //TODO: for now only polyfilling Gecko // check if this element matches this rule's selector if ( element.mozMatchesSelector(rule.selectorText) ) { // push the rule to the results set result.push(rule); } } } return result; }; }