document.styleSheets 里保存了当前页面上所有 CSS 规则的集合。通过它可以遍历出页面
这里我们只求 CSS 规则的覆盖率,所以访问 querySelectorAll().length 即可。通过排序就可看出各个 CSS 使用情况。
代码很简单。
- var usage = [];
- var sheets = document.styleSheets;
for(var i = sheets.length - 1; i != -1; i--) {
var rules = sheets[i].rules;
for(var j = rules.length - 1; j != -1; j--) {
var rule = rules[j];
var text = rule.selectorText;
usage.push({name: text, count: document.querySelectorAll(text).length});
}
}
usage.sort(function(a, b){return a.count - b.count});
for(var i = usage.length - 1; i != -1; i--) {
console.log("选择器:" + usage[i].name + "\n\t 匹配数:" + usage[i].count);
}
呼出 F12,把代码粘到 console 里回车即可。
当然由于权限问题,外部导入的 CSS 无论如何都访问不到,暂时先不考虑了。至于不支持 styleSheets 的破 IE 嘛,可以考虑用 expression 或者 behaviour.htc,改天试试看。
纯 JS 实现就到此。以后配合本地程序实现外部 CSS 的分析。
顺便贴个测试结果:
哪些 CSS 没用到一目了然:
当然,0 匹配并不代表它就是没用的。最典型的例子就是: hover,只有鼠标移上去才会匹配。还有通过 className 控制,[attr=],# 动态 ID,动态元素。。。。等等等等的样式都不是轻易能匹配到。
所以以上代码意义并不大,而且目前主流浏览器都内置 Profiles 功能,并且能实时跟踪选择器匹配的元素数,所以做个 IE 版本的才有些意义:)
来源: http://www.phperz.com/article/17/0721/279812.html