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操作二级联动实现代码
Jul 27 Javascript
基于jquery的lazy loader插件实现图片的延迟加载[简单使用]
May 07 Javascript
JS控制图片等比例缩放的示例代码
Dec 24 Javascript
js实现使用鼠标拖拽切换图片的方法
May 04 Javascript
jquery实现简单的全选和反选功能
Jan 02 Javascript
Three.js基础部分学习
Jan 08 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
Sep 06 Javascript
Node.js实现连接mysql数据库功能示例
Sep 15 Javascript
基于wordpress的ajax写法详解
Jan 02 Javascript
AnglarJs中的上拉加载实现代码
Feb 08 Javascript
Vue.js标签页组件使用方法详解
Oct 19 Javascript
微信小程序批量上传图片到七牛(推荐)
Dec 19 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中opendir函数用法实例
2014/11/15 PHP
PHP使用curl模拟post上传及接收文件的方法
2016/03/04 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
2019/08/05 PHP
浅谈laravel5.5 belongsToMany自身的正确用法
2019/10/17 PHP
Aliyun Linux 编译安装 php7.3 tengine2.3.2 mysql8.0 redis5的过程详解
2020/10/20 PHP
Jquery 1.42 checkbox 全选和反选代码
2010/03/27 Javascript
jQuery 插件仿百度搜索框智能提示(带Value值)
2013/01/22 Javascript
js使用ajax读博客rss示例
2014/05/06 Javascript
javascript特殊文本输入框网页特效
2016/09/13 Javascript
vue-router 实现导航守卫(路由卫士)的实例代码
2018/09/02 Javascript
javascript中函数的写法实例代码详解
2018/10/28 Javascript
Three.JS实现三维场景
2018/12/30 Javascript
Node.js对MongoDB进行增删改查操作的实例代码
2019/04/18 Javascript
JavaScript实现五子棋游戏的方法详解
2019/07/08 Javascript
vuex+axios+element-ui实现页面请求loading操作示例
2020/02/02 Javascript
js实现消灭星星(web简易版)
2020/03/24 Javascript
详解JavaScript中new操作符的解析和实现
2020/09/04 Javascript
python中defaultdict的用法详解
2017/06/07 Python
python实现抖音点赞功能
2019/04/07 Python
Python求离散序列导数的示例
2019/07/10 Python
python UDP(udp)协议发送和接收的实例
2019/07/22 Python
详解Python修复遥感影像条带的两种方式
2020/02/23 Python
Python 的 f-string 可以连接字符串与数字的原因解析
2021/02/20 Python
GUESS德国官网:美国牛仔服装品牌
2017/02/14 全球购物
尤为Wconcept中国官网:韩国设计师品牌服饰
2019/01/10 全球购物
伦敦香水公司:The London Perfume Company
2019/11/13 全球购物
打架检讨书800字
2014/01/10 职场文书
大学校庆策划书
2014/01/31 职场文书
先进工作者获奖感言
2014/02/08 职场文书
幼儿园教师师德师风演讲稿:我自豪我是一名幼师
2014/09/10 职场文书
教师党员个人自我评价
2015/03/04 职场文书
企业安全生产检查制度
2015/08/06 职场文书
2016年度创先争优活动总结
2016/04/05 职场文书
一个成功的互联网创业项目,必须满足这些要求
2019/08/23 职场文书
mysql外连接与内连接查询的不同之处
2021/06/03 MySQL
Python中with上下文管理协议的作用及用法
2022/03/18 Python