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类
Sep 08 Javascript
用htc组件制作windows选项卡
Jan 13 Javascript
使用EXT实现无刷新动态调用股票信息
Nov 01 Javascript
jquery 查找select ,并触发事件的实现代码
Mar 30 Javascript
简单的js表单验证函数
Oct 28 Javascript
js 弹出新页面避免被浏览器、ad拦截的一种新方法
Apr 30 Javascript
一些老手都不一定知道的JavaScript技巧
May 06 Javascript
js仿微博动态栏功能
Feb 22 Javascript
基于JavaScript实现的希尔排序算法分析
Apr 14 Javascript
Vue 重置组件到初始状态的方法示例
Oct 10 Javascript
React和Vue中监听变量变化的方法
Nov 14 Javascript
vue实现购物车功能(商品分类)
Apr 20 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验证码函数的使用示例
2013/05/03 PHP
PHP时间格式控制符对照表分享
2013/07/23 PHP
PHP定时任务延缓执行的实现
2014/10/08 PHP
PHP中ltrim与rtrim去除左右空格及特殊字符实例
2016/01/07 PHP
smarty自定义函数用法示例
2016/05/20 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
JQuery中根据属性或属性值获得元素(6种情况获取方法)
2013/01/17 Javascript
JS实现悬浮移动窗口(悬浮广告)的特效
2013/03/12 Javascript
JS实现QQ图片一闪一闪的效果小例子
2013/07/31 Javascript
javascript打印输出json实例
2013/11/11 Javascript
js substring从右边获取指定长度字符串(示例代码)
2013/12/23 Javascript
JavaScript基础篇(6)之函数表达式闭包
2015/12/11 Javascript
Vue.js 2.0学习教程之从基础到组件详解
2017/04/24 Javascript
js+html5生成自动排列对话框实例
2017/10/09 Javascript
React从react-router路由上做登陆验证控制的方法
2018/05/10 Javascript
vue中如何让子组件修改父组件数据
2018/06/14 Javascript
对Vue table 动态表格td可编辑的方法详解
2018/08/28 Javascript
使用webpack4编译并压缩ES6代码的方法示例
2019/04/24 Javascript
微信小程序常用赋值方法小结
2019/04/30 Javascript
Python获取当前路径实现代码
2017/05/08 Python
Python内置函数—vars的具体使用方法
2017/12/04 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
2017/12/20 Python
Django 路由控制的实现
2019/07/17 Python
python实现实时视频流播放代码实例
2020/01/11 Python
python剪切视频与合并视频的实现
2020/03/03 Python
Python Django form 组件动态从数据库取choices数据实例
2020/05/19 Python
HTML5中input[type='date']自定义样式与日历校验功能的实现代码
2017/07/11 HTML / CSS
塑料制成的可水洗的编织平底鞋和鞋子:Rothy’s
2018/09/16 全球购物
Notino匈牙利:购买香水和化妆品
2019/04/12 全球购物
俄罗斯奢侈品牌衣服、鞋子和配饰的在线商店:INTERMODA
2020/07/17 全球购物
在DELPHI中调用存储过程和使用内嵌SQL哪种方式更好
2016/11/22 面试题
晨会主持词
2014/03/17 职场文书
园林系毕业生求职信
2014/06/23 职场文书
环卫工作汇报材料
2014/10/28 职场文书
病危通知书样本
2015/04/17 职场文书
创业计划书之电动车企业
2019/10/11 职场文书