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 相关文章推荐
javascript Array.remove() 数组删除
Aug 06 Javascript
jquery ready函数源代码研究
Dec 06 Javascript
JQuery 构建客户/服务分离的链接模型中Table分页代码效率初探
Jan 22 Javascript
jQuery 淡出一个图像到另一个图像的实现代码
Jun 12 Javascript
jquery图片轮播插件仿支付宝2013版全屏图片幻灯片
Apr 03 Javascript
PHP+jquery+ajax实现分页
Dec 09 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
Feb 14 Javascript
详解angularJS动态生成的页面中ng-click无效解决办法
Jun 19 Javascript
Vue调试神器vue-devtools安装方法
Dec 12 Javascript
vue-cli构建项目下使用微信分享功能
May 28 Javascript
详解小程序用户登录状态检查与更新实例
May 15 Javascript
vue修改Element的el-table样式的4种方法
Sep 17 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
文件上传程序的全部源码
2006/10/09 PHP
兼容性最强的PHP生成缩略图的函数代码(修改版)
2011/01/18 PHP
php获取目标函数执行时间示例
2014/03/04 PHP
ThinkPHP之N方法实例详解
2014/06/20 PHP
使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能示例
2017/09/15 PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
2018/01/15 PHP
PHP 并发场景的几种解决方案
2019/06/14 PHP
Jquery实现控件的隐藏和显示实例
2014/02/08 Javascript
Windows8下搭建Node.js开发环境教程
2014/09/03 Javascript
一波JavaScript日期判断脚本分享
2016/03/06 Javascript
jQuery Mobile操作HTML5的常用函数总结
2016/05/17 Javascript
Vue2.0权限树组件实现代码
2017/08/29 Javascript
js定时器+简单的动画效果实例
2017/11/10 Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
2017/12/26 Javascript
Node 升级到最新稳定版的方法分享
2018/05/17 Javascript
JavaScript中变量提升与函数提升经典实例分析
2018/07/26 Javascript
浅谈目前可以使用ES10的5个新特性
2019/06/25 Javascript
vue flex 布局实现div均分自动换行的示例代码
2020/08/05 Javascript
[44:39]2014 DOTA2国际邀请赛中国区预选赛 NE VS CNB
2014/05/21 DOTA
[01:26]神话结束了,却也刚刚开始——DOTA2新英雄玛尔斯驾临战场
2019/03/10 DOTA
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
名人珠宝设计师:Melinda Maria Jewelry
2019/03/06 全球购物
C语言编程练习
2012/04/02 面试题
客服实习的个人自我鉴定
2013/10/20 职场文书
海洋科学专业求职信
2014/08/10 职场文书
我们的节日春节活动方案
2014/08/22 职场文书
个人委托书怎么写
2014/09/17 职场文书
领导干部查摆“四风”问题自我剖析材料思想汇报
2014/10/05 职场文书
中学教师师德师风承诺书
2015/04/28 职场文书
辛德勒的名单观后感
2015/06/03 职场文书
小学四年级班主任工作经验交流材料
2015/11/02 职场文书
智慧人生:永远不需要向任何人解释你自己
2019/08/20 职场文书
go mod 安装依赖 unkown revision问题的解决方案
2021/05/06 Golang
解决SpringBoot跨域的三种方式
2021/06/26 Java/Android
一篇文章带你深入了解Mysql触发器
2021/08/02 MySQL
mysql 获取相邻数据项
2022/05/11 MySQL