20行代码实现的一个CSS覆盖率测试脚本


Posted in Javascript onJuly 07, 2013

document.styleSheets里保存了当前页面上所有CSS规则的集合。通过它可以遍历出页面<style>里定义的所有selector,访问selectorText属性可得选择器的匹配规则。然后将规则规则传递给 document.querySelectorAll 即可获取页面内匹配此规则的元素列表。
这里我们只求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的分析。

顺便贴个测试结果:

20行代码实现的一个CSS覆盖率测试脚本

哪些CSS没用到一目了然:

20行代码实现的一个CSS覆盖率测试脚本

当然,0匹配并不代表它就是没用的。最典型的例子就是:hover,只有鼠标移上去才会匹配。还有通过className控制,[attr=],#动态ID,动态元素。。。。等等等等的样式都不是轻易能匹配到。

所以以上代码意义并不大,而且目前主流浏览器都内置Profiles功能,并且能实时跟踪选择器匹配的元素数,所以做个IE版本的才有些意义:)

Javascript 相关文章推荐
js中将具有数字属性名的对象转换为数组
Mar 06 Javascript
angularJS结合canvas画图例子
Feb 09 Javascript
jQuery DOM插入节点操作指南
Mar 03 Javascript
ExtJs动态生成treepanel的Json格式
Jul 19 Javascript
如何使用jquery easyui创建标签组件
Nov 18 Javascript
jQuery form插件的使用之处理server返回的JSON, XML,HTML数据
Jan 26 Javascript
初步使用bootstrap快速创建页面
Mar 03 Javascript
基于JavaScript实现轮播图代码
Jul 14 Javascript
Bootstrap框架的学习教程详解(二)
Oct 18 Javascript
jquery实现超简单的瀑布流布局【推荐】
Mar 08 Javascript
node操作mysql数据库实例详解
Mar 17 Javascript
js实现点赞按钮功能的实例代码
Mar 06 Javascript
在JavaScript里嵌入大量字符串常量的实现方法
Jul 07 #Javascript
JQuery表格内容过滤的实现方法
Jul 05 #Javascript
JS动态创建Table,Tr,Td并赋值的具体实现
Jul 05 #Javascript
Javascript实现动态菜单添加的实例代码
Jul 05 #Javascript
javascript实现跳转菜单的具体方法
Jul 05 #Javascript
JavaScript获取和设置CheckBox状态的简单方法
Jul 05 #Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
Jul 05 #Javascript
You might like
PHP网站提速三大“软”招
2006/10/09 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
2014/10/31 PHP
PHP模板引擎Smarty内置变量调解器用法详解
2016/04/11 PHP
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本
2006/09/22 Javascript
JSON 学习之完全手册 图文
2007/05/29 Javascript
Javascript实现视频轮播在pc端与移动端均可
2013/09/29 Javascript
优化Jquery,提升网页加载速度
2013/11/14 Javascript
探讨JavaScript中声明全局变量三种方式的异同
2013/12/03 Javascript
js简单的表格添加行和删除行操作示例
2014/03/31 Javascript
全面解析Bootstrap表单使用方法(表单控件状态)
2015/11/24 Javascript
功能强大的Bootstrap效果展示(二)
2016/08/03 Javascript
Vue.js常用指令汇总(v-if、v-for等)
2016/11/03 Javascript
AngularJS操作键值对象类似java的hashmap(填坑小结)
2016/11/12 Javascript
原生JS实现简单放大镜效果
2017/02/08 Javascript
jQuery.cookie.js使用方法及相关参数解释
2017/03/06 Javascript
js实现随机点名系统(实例讲解)
2017/10/18 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
2017/11/11 Javascript
Next.js实现react服务器端渲染的方法示例
2019/01/06 Javascript
vue+express+jwt持久化登录的方法
2019/06/14 Javascript
layui监听select变化,以及设置radio选中的方法
2019/09/24 Javascript
跟老齐学Python之有容乃大的list(4)
2014/09/28 Python
使用Python编写提取日志中的中文的脚本的方法
2015/04/30 Python
python字符类型的一些方法小结
2016/05/16 Python
详解Python中使用base64模块来处理base64编码的方法
2016/07/01 Python
详解python的webrtc库实现语音端点检测
2017/05/31 Python
pyqt5 QProgressBar清空进度条的实例
2019/06/21 Python
python hough变换检测直线的实现方法
2019/07/12 Python
详解Python中pyautogui库的最全使用方法
2020/04/01 Python
Python爬虫抓取指定网页图片代码实例
2020/07/24 Python
River Island美国官网:英国高街时尚品牌
2018/09/04 全球购物
什么是Remote Module
2016/06/10 面试题
2015年办公室个人工作总结
2015/04/20 职场文书
2016习总书记系列重要讲话心得体会
2016/01/15 职场文书
房屋买卖定金协议书
2016/03/21 职场文书
springboot @ConfigurationProperties和@PropertySource的区别
2021/06/11 Java/Android
《群青的幻想曲》京力秋树角色PV公开
2022/04/08 日漫