Javascript 获取页面中所有的CSS
来源:互联网 发布:java 预测算法 开源 编辑:程序博客网 时间:2024/05/20 10:20
最近遇到一个难题,需要用javascript把页面所有的CSS都抓到,如果是html中的style标签就很好获取,或者是html中内联的style也好获取。
但是html还可以通过link和@import的方式导入css,特别是@import,在link进来的css文件中完全可能还有@import,于是就又多了个css文件。
index.html:
<html><head><link rel="stylesheet" type="text/css" href="http://i.cdn.turner.com/cnn/.element/css/3.0/personalization.css" ></head></html>
研究了一下JS的获取方法,发现IE和Firefox都有办法获取。
在IE和Firfox中都有document.styleSheets这个对象,这个对象包含了在这个页面中的所有css,可以看作页面中的每一个link或者没一个style标签定义的css算一个sheet,只不过在取值的时候IE和Firefox稍有点不同。
//在IE中的取值方式var sheets = document.stylesheets;var cssSheets = {};for(var i=0,l=sheets.length;i<l;i++){var href = sheet.href;//如果是link或者是@import的css就会有href,值是绝对路径的url,即使原来是相对路径,但是通过这个方式到的是绝对路径;var cssText = sheet.cssText;//在IE中很直接,通过cssText就能取到这个sheet的css,在firefox中稍微麻烦一点cssSheets[herf] = cssText;}
//在firefox中的取值方式var sheets = document.stylesheets;var cssSheets = {};for(var i=0,l=sheets.length;i<l;i++){var href = sheet.href;//这个和IE是一样的//取cssText要复杂点var rules = sheet.cssRules;var cssText = "";for(var j=0,le=rules.length;j<le;j++){var rule = rules[j];var rc = rule.cssText;cssText += rc;}cssSheets[herf] = cssText;}
但是如果在这个sheet中有通过@import的方式导入其他的css,那就需要继续获取imports
IE是通过imports = sheet.imports来获取,而firefox是通过rule.styleSheet来取,加入递归
//在IE中的取值方式var sheets = document.stylesheets;var cssSheets = {};function parseSheet(sheet){var imports = sheet.imports;for(var i=0,l=imports.length;i<l;i++){parseSheet(imports[i]);}var href = sheet.href;var cssText = sheet.cssText;cssSheets[herf] = cssText;};for(var i=0,l=sheets.length;i<l;i++){parseSheet(sheets[i]);}
//在firefox中的取值方式var sheets = document.stylesheets;var cssSheets = {};function parseSheet(sheet){var href = sheet.href;var rules = sheet.cssRules;var cssText = "";for(var j=0,le=rules.length;j<le;j++){var rule = rules[j];var rc = rule.cssText;cssText += rc;var styleSheet = rule.styleSheet;//如果rule是@import的样式,那就继续获取它的styleSheetif(styleSheet && styleSheet!=null && styleSheet.href){parseSheet(styleSheet);}}cssSheets[herf] = cssText;};for(var i=0,l=sheets.length;i<l;i++){parseSheet(sheets[i]);}
通过这个方式就能把页面中定义的style标签,link标签里面的css都取到了。
- Javascript 获取页面中所有的CSS
- javascript 获取页面所有文本框
- javascript 遍历页面中所有的元素
- jQuery中 获取页面的所有电子邮箱
- JavaScript中获取当月的所有天数
- JavaScript获取CSS中样式的值
- Javascript显示当前页面中所有图片的特效
- 获取页面中所有类型为text的input控件
- jsp页面中html,javascript.css的执行顺序
- Webbrowser获取页面中所有frame
- 获取指定URl页面中所有链接
- 获取页面中所有 checkbox的对面,并获取它的值
- scrollTop:在JavaScript中获取当前页面的滚动位置
- javascript 获取iframe里页面中元素的值
- JavaScript获取远程的html到当前页面中
- scrollTop:在JavaScript中获取当前页面的滚动位置
- 获取页面的所有TextBox的值
- HTML、CSS、JavaScript的所有注释形式
- 大小公司比较,个人观点
- IP地址与路由
- 求一个数的素数因子
- 家庭一控通 智能家居(自己想象)未来的家居智能
- 过滤特殊字符
- Javascript 获取页面中所有的CSS
- RHEL5和RHEL6中的sctp_event_subscribe定义大不同
- VC 工程设置的项含义
- java annotation学习
- 我勒个去,你们疯了吧?webOS比Android好多了!
- JavaScript网页键盘
- 杂感
- 1
- Flex 遍历对象的属性和值