只需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插件集合推荐
Apr 19 Javascript
简短几句jquery代码的实现一个图片向上滚动切换
Sep 02 Javascript
什么是Node.js?Node.js详细介绍
Jun 01 Javascript
jQuery实现的背景动态变化导航菜单效果
Aug 24 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
Dec 20 Javascript
javascript实现图片轮播效果
Jan 20 Javascript
浅析angularJS中的ui-router和ng-grid模块
May 20 Javascript
微信小程序 request接口的封装实例代码
Apr 26 Javascript
echarts同一页面中四个图表切换的js数据交互方法示例
Jul 03 Javascript
详解Angular-ui-BootStrap组件的解释以及使用
Jul 13 Javascript
Vue+Openlayers自定义轨迹动画
Sep 24 Javascript
JavaScript文档对象模型DOM
Nov 20 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
开源SNS系统-ThinkSNS
2008/05/18 PHP
PHP使用stream_context_create()模拟POST/GET请求的方法
2016/04/02 PHP
js脚本学习 比较实用的基础
2006/09/07 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件
2011/12/21 Javascript
jquery和ajax的关系详细介绍
2013/11/29 Javascript
FF IE浏览器修改标签透明度的方法
2014/01/27 Javascript
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
jQuery判断元素上是否绑定了指定事件的方法
2015/03/17 Javascript
JS &amp; JQuery 动态添加 select option
2016/06/08 Javascript
javascript与jquery动态创建html元素示例
2016/07/25 Javascript
纯css下拉菜单 无需js
2016/08/15 Javascript
通过js修改input、select默认字体颜色
2017/04/19 Javascript
Vue中组件之间数据的传递的示例代码
2017/09/08 Javascript
利用纯js + transition动画实现移动端web轮播图详解
2017/09/10 Javascript
浅谈vue中.vue文件解析流程
2018/04/24 Javascript
vue-cli项目配置多环境的详细操作过程
2018/10/30 Javascript
在 Vue.js中优雅地使用全局事件的方法
2019/02/01 Javascript
vue本地打开build后生成的dist文件夹index.html问题
2019/09/04 Javascript
Vue中keep-alive 实现后退不刷新并保持滚动位置
2020/03/17 Javascript
vue设置默认首页的操作
2020/08/12 Javascript
[01:28:31]《加油DOTA》真人秀 第五期
2014/09/01 DOTA
Tensorflow中的placeholder和feed_dict的使用
2018/07/09 Python
Python微医挂号网医生数据抓取
2019/01/24 Python
django foreignkey(外键)的实现
2019/07/29 Python
Python中 CSV格式清洗与转换的实例代码
2019/08/29 Python
python 实现多维数组转向量
2019/11/30 Python
Python enumerate内置库用法解析
2020/02/24 Python
配置python的编程环境之Anaconda + VSCode的教程
2020/03/29 Python
python 下载m3u8视频的示例代码
2020/11/11 Python
html5 sessionStorage会话存储_动力节点Java学院整理
2017/07/06 HTML / CSS
大唐电信科技股份有限公司java工程师面试经历
2016/12/09 面试题
武汉英思工程科技有限公司&ndash;ORACLE面试测试题目
2012/04/30 面试题
庆元旦迎新年广播稿
2014/02/18 职场文书
检讨书1000字
2014/10/11 职场文书
考试作弊检讨书
2015/01/27 职场文书
关于感恩老师的古诗句
2019/08/20 职场文书