只需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 使用手册(五)
Sep 23 Javascript
JavaScript中实现块作用域的方法
Apr 01 Javascript
JS动态添加与删除select中的Option对象(示例代码)
Dec 25 Javascript
JavaScript常用验证函数实例汇总
Nov 25 Javascript
javascript比较两个日期相差天数的方法
Jul 24 Javascript
JQuery点击事件回到页面顶部效果的实现代码
May 24 Javascript
原生JavaScript编写canvas版的连连看游戏
May 29 Javascript
js实现将json数组显示前台table中
Jan 10 Javascript
微信小程序 生命周期和页面的生命周期详细介绍
Jan 19 Javascript
vuex提交state&amp;&amp;实时监听state数据的改变方法
Sep 16 Javascript
详解原生JS动态添加和删除类
Mar 26 Javascript
使用vue实现通过变量动态拼接url
Jul 22 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
PHP 查找字符串常用函数介绍
2012/06/07 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
2019/09/19 PHP
jquery 结合C#后台的数组对文章的关键字自动添加链接的代码
2011/07/15 Javascript
JavaScript利用append添加元素报错的解决方法
2014/07/01 Javascript
直接在JS里创建JSON数据然后遍历使用
2014/07/25 Javascript
js获取字符串字节数方法小结
2015/06/09 Javascript
jQuery.prop() 使用详解
2015/07/19 Javascript
AngularJS初始化静态模板详解
2016/01/14 Javascript
JS未跨域操作iframe里的DOM
2016/06/01 Javascript
javascript数组常用方法汇总
2016/09/10 Javascript
js数组去重的hash方法
2016/12/22 Javascript
bootstrap table分页模板和获取表中的ID方法
2017/01/10 Javascript
bootstrap jquery dataTable 异步ajax刷新表格数据的实现方法
2017/02/10 Javascript
AngulerJS学习之按需动态加载文件
2017/02/13 Javascript
jquery学习笔记之无new构建详解
2017/12/07 jQuery
vue路由拦截器和请求拦截器知识点总结
2019/11/08 Javascript
简述Vue中容易被忽视的知识点
2019/12/09 Javascript
Vue 一键清空表单的实现方法
2020/02/07 Javascript
JS面向对象编程实现的拖拽功能案例详解
2020/03/03 Javascript
webpack3.0升级4.0的方法步骤
2020/04/02 Javascript
electron踩坑之dialog中的callback解决
2020/10/06 Javascript
JS实现纸牌发牌动画
2021/01/19 Javascript
python使用wxpython开发简单记事本的方法
2015/05/20 Python
Python中subprocess的简单使用示例
2015/07/28 Python
python利用Guetzli批量压缩图片
2017/03/23 Python
Python3.5 处理文本txt,删除不需要的行方法
2018/12/10 Python
用Python解决x的n次方问题
2019/02/08 Python
python保存字典和读取字典的实例代码
2019/07/07 Python
python爬虫刷访问量 2019 7月
2019/08/01 Python
python 爬虫百度地图的信息界面的实现方法
2019/10/27 Python
Django 请求Request的具体使用方法
2019/11/11 Python
JAKO-O德国野酷台湾站:德国首屈一指的婴幼童用品品牌
2019/01/14 全球购物
澳大利亚领先的女帽及配饰公司:Morgan&Taylor
2019/12/01 全球购物
Nike墨西哥官网:Nike MX
2020/08/30 全球购物
Python实现的扫码工具居然这么好用!
2021/06/07 Python
windows系统搭建WEB服务器详细教程
2022/08/05 Servers