只需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 相关文章推荐
Js从头学起(基本数据类型和引用类型的参数传递详细分析)
Feb 16 Javascript
jquery垂直公告滚动实现代码
Dec 08 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
Jan 02 Javascript
javascript删除一个html元素节点的方法
Dec 20 Javascript
jQuery简单实现图片预加载
Apr 20 Javascript
理解js对象继承的N种模式
Jan 25 Javascript
Vue.js中数组变动的检测详解
Oct 12 Javascript
AngularJS中的DOM操作用法分析
Nov 04 Javascript
JavaScript的兼容性与调试技巧
Nov 22 Javascript
基于Bootstrap和jQuery构建前端分页工具实例代码
Nov 23 Javascript
微信小程序实战之自定义toast(6)
Apr 18 Javascript
vue 接口请求地址前缀本地开发和线上开发设置方式
Aug 13 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
一个多文件上传的例子(原创)
2006/10/09 PHP
PHP提取中文首字母
2008/04/09 PHP
PHP环境搭建的详细步骤
2016/06/30 PHP
PHP PDOStatement::setAttribute讲解
2019/02/01 PHP
javascript 数组排序函数
2009/08/20 Javascript
jquery mobile页面跳转后样式丢失js失效的解决方法
2014/09/06 Javascript
Javascript基础教程之if条件语句
2015/01/18 Javascript
基于JS实现简单的样式切换效果代码
2015/09/04 Javascript
深入php面向对象、模式与实践
2016/02/16 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【一】
2016/05/10 Javascript
Bootstrap CSS组件之下拉菜单(dropdown)
2016/12/17 Javascript
老生常谈javascript的面向对象思想
2017/08/22 Javascript
node下使用UglifyJS压缩合并JS文件的方法
2018/03/07 Javascript
微信小程序canvas绘制圆角base64图片的实现
2019/08/18 Javascript
vue中实现上传文件给后台实例详解
2019/08/22 Javascript
vue实现跳转接口push 转场动画示例
2019/11/01 Javascript
vue自定义标签和单页面多路由的实现代码
2020/05/03 Javascript
js实现前端界面导航栏下拉列表
2020/08/27 Javascript
[30:37]【全国守擂赛】第三周擂主赛 Dark Knight vs. Leopard Gaming
2020/05/04 DOTA
Python验证文件是否可读写代码分享
2017/12/11 Python
python中(str,list,tuple)基础知识汇总
2018/02/20 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
python2和python3在处理字符串上的区别详解
2019/05/29 Python
pandas 时间格式转换的实现
2019/07/06 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
2019/08/09 Python
Python函数参数类型及排序原理总结
2019/12/19 Python
俄罗斯GamePark游戏商店网站:购买游戏、游戏机和配件
2020/03/13 全球购物
司机职责范本
2014/03/08 职场文书
期中考试反思800字
2014/05/01 职场文书
村抢险救灾方案
2014/05/09 职场文书
综合素质评价个性与发展自我评价
2015/03/06 职场文书
部队2015年终工作总结
2015/04/02 职场文书
oracle连接ODBC sqlserver数据源的详细步骤
2021/07/25 Oracle
Python 数据结构之十大经典排序算法一文通关
2021/10/16 Python
MySQL图形化管理工具Navicat安装步骤
2021/12/04 MySQL
Mysql 8.x 创建用户以及授予权限的操作记录
2022/04/18 MySQL