只需20行代码就可以写出CSS覆盖率测试脚本


Posted in Javascript onApril 24, 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,改天试试看。

顺便贴个测试结果:

只需20行代码就可以写出CSS覆盖率测试脚本

Javascript 相关文章推荐
jQuery渐变发光导航菜单的实例代码
Mar 27 Javascript
JQuery显示隐藏页面元素的方法总结
Apr 16 Javascript
jQuery+HTML5实现手机摇一摇换衣特效
Jun 05 Javascript
深入理解关于javascript中apply()和call()方法的区别
Apr 12 Javascript
JS对HTML表格进行增删改操作
Aug 22 Javascript
微信小程序 教程之wxapp视图容器 swiper
Oct 19 Javascript
图文详解Javascript中的上下文和作用域
Feb 15 Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
Apr 07 jQuery
JS实现自定义弹窗功能
Aug 08 Javascript
详解如何使用nvm管理Node.js多版本
May 06 Javascript
uni-app之APP和小程序微信授权方法
May 09 Javascript
atom-design(Vue.js移动端组件库)手势组件使用教程
May 16 Javascript
js Array对象的扩展函数代码
Apr 24 #Javascript
网页中返回顶部代码(多种方法)另附注释说明
Apr 24 #Javascript
onkeypress字符按键兼容所有浏览器使用介绍
Apr 24 #Javascript
纯JS实现五子棋游戏兼容各浏览器(附源码)
Apr 24 #Javascript
jquery仿京东导航/仿淘宝商城左侧分类导航下拉菜单效果
Apr 24 #Javascript
基于jQuery实现图片的前进与后退功能
Apr 24 #Javascript
查看图片(前进后退)功能实现js代码
Apr 24 #Javascript
You might like
改进:论坛UBB代码自动插入方式
2006/12/22 Javascript
jQuery get和post 方法传值注意事项
2009/11/03 Javascript
改变状态栏文字的js代码
2014/06/13 Javascript
加载列表时jquery获取ul中第一个li的属性
2014/11/02 Javascript
javascript获取当前鼠标坐标的方法
2015/01/10 Javascript
javasript实现密码的隐藏与显示
2015/05/08 Javascript
分享使用AngularJS创建应用的5个框架
2015/12/05 Javascript
JavaScript常用字符串与数组扩展函数小结
2016/04/24 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
JS选取DOM元素的简单方法
2016/07/08 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
2016/08/29 Javascript
Vue.js每天必学之数据双向绑定
2016/09/05 Javascript
巧用数组制作图片切换js代码
2016/11/29 Javascript
基于Cookie常用操作以及属性介绍
2017/09/07 Javascript
JavaScript中的E-mail 地址格式验证
2018/03/28 Javascript
详解a标签添加onclick事件的几种方式
2019/03/29 Javascript
node.js实现带进度条的多文件上传
2020/03/27 Javascript
koa2+vue实现登陆及登录状态判断
2019/08/15 Javascript
kafka调试中遇到Connection to node -1 could not be established. Broker may not be available.
2019/09/17 Javascript
js实现抽奖的两种方法
2020/03/19 Javascript
vue中element 的upload组件发送请求给后端操作
2020/09/07 Javascript
[48:00]EG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/29 DOTA
python3中int(整型)的使用教程
2017/03/23 Python
python实现在pandas.DataFrame添加一行
2018/04/04 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
2019/11/15 Python
Python selenium的基本使用方法分析
2019/12/21 Python
python右对齐的实例方法
2020/07/05 Python
Schutz鞋官方网站:Schutz Shoes
2017/12/13 全球购物
巴西电子产品购物网站:Saldão da Informática
2018/01/09 全球购物
Genny意大利官网:意大利高级时装品牌
2020/04/15 全球购物
国外软件测试工程师面试题
2016/12/09 面试题
广告宣传策划方案
2014/05/21 职场文书
三八妇女节新闻稿
2015/07/17 职场文书
Python中的pprint模块
2021/11/27 Python
MySQL安装失败的原因及解决步骤
2022/06/14 MySQL