只需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 相关文章推荐
Javascript面向对象设计一 工厂模式
Dec 20 Javascript
一个JS函数搞定网页标题(title)闪动效果
May 13 Javascript
百度地图自定义控件分享
Mar 04 Javascript
jQuery Mobile框架中的表单组件基础使用教程
May 17 Javascript
JS获取当前页面名称的简单实例
Aug 19 Javascript
javascript数据类型详解
Feb 07 Javascript
JavaScript实现二叉树的先序、中序及后序遍历方法详解
Oct 26 Javascript
Vue组件库发布到npm详解
Feb 17 Javascript
对angularJs中controller控制器scope父子集作用域的实例讲解
Oct 08 Javascript
jQuery实现的隔行变色功能【案例】
Feb 18 jQuery
Vue+axios封装请求实现前后端分离
Oct 23 Javascript
js实现模拟购物商城案例
May 18 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 自定义错误处理函数trigger_error()
2013/03/26 PHP
php解析url并得到url中的参数及获取url参数的四种方式
2015/10/26 PHP
PHP实现将标点符号正则替换为空格的方法
2017/08/09 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
JScript 脚本实现文件下载 一般用于下载木马
2009/10/29 Javascript
JavaScript 布尔操作符解析  &amp;&amp; || !
2012/08/10 Javascript
js遍历td tr等html元素
2012/12/13 Javascript
js onload事件不起作用示例分析
2013/10/09 Javascript
JavaScript新窗口与子窗口传值详解
2014/02/11 Javascript
jquery获取颜色在ie和ff下的区别示例介绍
2014/03/28 Javascript
一个支持任意尺寸的图片上下左右滑动效果
2014/08/24 Javascript
JavaScript中实现异步编程模式的4种方法
2014/09/24 Javascript
浅谈javascript 函数内部属性
2015/01/21 Javascript
如何利用JS通过身份证号获取当事人的生日、年龄、性别
2016/01/22 Javascript
js编写三级联动简单案例
2016/12/21 Javascript
微信小程序 ecshop地址三级联动实现实例代码
2017/02/28 Javascript
javascript中神奇的 Date对象小结
2017/10/12 Javascript
详解javascript appendChild()的完整功能
2018/08/18 Javascript
vue配置接口域名方法总结
2019/05/12 Javascript
原生JS实现留言板
2020/03/26 Javascript
Jquery+javascript实现支付网页数字键盘
2020/12/21 jQuery
Python使用redis pool的一种单例实现方式
2016/04/16 Python
python smtplib模块自动收发邮件功能(二)
2018/05/22 Python
基于windows下pip安装python模块时报错总结
2018/06/12 Python
树莓派极简安装OpenCv的方法步骤
2019/10/10 Python
Pycharm远程连接服务器并实现代码同步上传更新功能
2020/02/25 Python
解决python -m pip install --upgrade pip 升级不成功问题
2020/03/05 Python
Python通过递归函数输出嵌套列表元素
2020/10/15 Python
为什么UNION ALL比UNION快
2016/03/17 面试题
一些.net面试题
2014/10/06 面试题
三年级科学教学反思
2014/01/29 职场文书
销售员个人求职的自我评价
2014/02/10 职场文书
班主任对学生的评语
2014/04/26 职场文书
2014年置业顾问工作总结
2014/11/17 职场文书
2019年聘任书的写作格式及范文!
2019/07/03 职场文书
python 爬取哔哩哔哩up主信息和投稿视频
2021/06/07 Python