用 javascript 获取页面上有选择符的 CSS 规则

作者: Yanfu Xie     来源: Codebit.cn     时间: 2007-02-03 16:09:29
摘要: 本文介绍的方法可以返回页面上有选择符的 CSS 规则,支持 <link /> 标签和页面内部 <style></style> 样式块,可以返回指定选择符下指定属性的值。
归类: Javascript,

关键词: javascript, css, style, 选择符, 样式, stylesheet,


本文介绍的方法可以返回页面上有选择符的 CSS 规则,支持 <link /> 标签和页面内部 <style></style> 样式块,可以返回指定选择符下指定属性的值。 


--------------------------------------------------------------
点此浏览示例文件
--------------------------------------------------------------


Javascript:
  1.  
  2. <script type="text/javascript">
  3. /* ###################################################
  4. * 说明:用 javascript 获取页面上有选择符的 CSS 规则
  5. * 包括'内部样式块'和'外部样式表文件'
  6. * 作者:Yanfu Xie [xieyanfu@yahoo.com.cn]
  7. * 网址:http://www.CodeBit.cn
  8. * 日期:2007.01.16
  9. * #################################################*/
  10. function getCssRule()
  11. {
  12. // 样式总数
  13. var styleSheetLen = document.styleSheets.length;
  14.  
  15. if(!styleSheetLen) return;
  16.  
  17. // 样式规则名称,IE 和 FireFox 不同
  18. var ruleName = (document.styleSheets[0].cssRules)?'cssRules':'rules'; //FireFox:cssRules || IE:rules
  19.  
  20. // 初始结果
  21. var result = {};
  22.  
  23. var totalRuleLen = 0;
  24.  
  25. var totalSelectorLen = 0;
  26.  
  27. var totalProperty = 0;
  28.  
  29. for(var i=0; i<styleSheetLen; i++)
  30. {
  31. // 获取每个样式表定义
  32. var styleSheet = document.styleSheets[i];
  33.  
  34. // 每个样式表的规则数
  35. var ruleLen = styleSheet[ruleName].length;
  36.  
  37. totalRuleLen += ruleLen;
  38.  
  39. for(var j=0; j<ruleLen; j++)
  40. {
  41. // 获取当前规则的选择符
  42. // 传入选择符转换为小写
  43. var selectors = styleSheet[ruleName][j].selectorText.toLowerCase().split(",");
  44.  
  45. var selectorLen = selectors.length;
  46.  
  47. totalSelectorLen += selectorLen;
  48.  
  49. for(var s=0; s<selectorLen; s++)
  50. {
  51. // 去除选择符左右的空格
  52. selector = selectors[s].replace(/(^\s*)|(\s*$)/g, "");
  53.  
  54. // 初始化当前选择符
  55. result[selector] = {};
  56.  
  57. // 获取当前样式
  58. var styleSet = styleSheet[ruleName][j].style;
  59.  
  60. for (property in styleSet)
  61. {
  62. // 获取规则
  63. if(styleSet[property] && property != 'cssText')
  64. {
  65. //alert(selector +'=>'+ property +':'+ styleSet[property])
  66. result[selector][property] = styleSet[property];
  67.  
  68. totalProperty += 1;
  69. }
  70. }
  71. }
  72. }
  73. }
  74.  
  75. // 统计数据
  76. result.totalSheet = styleSheetLen; //样式块
  77. result.totalRule = totalRuleLen; //规则数
  78. result.totalSelector = totalSelectorLen; //选择符
  79. result.totalProperty = totalProperty; //属性
  80.  
  81. return result;
  82. }
  83. </script>
  84.  



用法示例:
HTML:
  1.  
  2. <link rel="stylesheet" type="text/css" href="test.css" />
  3.  
  4. <style type="text/css">
  5. a.Code, a.Test {
  6. color:#fff;
  7. background:#eee;
  8. }
  9. .class {
  10. border-top:1px solid #eee;
  11. }
  12. </style>
  13.  
  14. <script language="JavaScript" type="text/javascript">
  15.  
  16. // 获取规则
  17. var css = getCssRule();
  18.  
  19. // 获取指定选择符下面的 CSS 属性值
  20. // selector:选择符(小写)
  21. // attribute:查询的 CSS 属性,脚本模式(如:background-color 为 backgroundColor)
  22. function getCssValue(selector, attribute)
  23. {
  24. return (css[selector])?(css[selector][attribute])?css[selector][attribute]:false:false;
  25. }
  26.  
  27. document.write("<strong>统计数据</strong> <br />");
  28. document.write(css.totalSheet + " 个 CSS 样式块(包括&lt;link /&gt;标签和&lt;style&gt;&lt;/style&gt;样式块) <br />");
  29. document.write(css.totalRule + " 条规则(FireFox 下分组选择符如:body, form, p {} 算一条, IE 将分开计算) <br />");
  30. document.write(css.totalSelector + " 个选择符(将分组选择符分开计算) <br />");
  31. document.write(css.totalProperty + " 条 CSS 属性(如:border:1px solid #eee;) <br /><br />");
  32.  
  33. // 传入选择符为小写,属性为脚本模式
  34. document.write("<strong>选择符为 'a.test' 的背景颜色(backgroundColor) 为:</strong> <br />");
  35. document.write("<strong>语法:</strong>getCssValue('a.test', 'backgroundColor'); <br />");
  36. document.write("<strong>结果:</strong>" + getCssValue('a.test', 'backgroundColor') + "<br />");
  37. document.write("IE 直接返回属性值,但 FireFox 返回 RGB 值");
  38.  
  39. </script>
  40.  



IE 和 FireFox 将自动添加一些规则,比如你只定义 border:1px solid #eee; 它们会自动添加 borderTop, borderBottom, borderLeft, borderRight 的值,在返回值上两个浏览器的处理方法也不同,比如颜色,FireFox 会返回 RGB 格式的颜色值,而 IE 则直接返回规则中的属性值,但这些并不影响应用。


推荐链接:(联系 QQ :326801485)