使用 style 属性,仅仅只能获取和设置行内的样式,如果是通过内联<style>或链接<link>提供的样式规则就无可奈何了,使用 getComputedStyle 和currentStyle,这只能获取却无法设置。

一、检测是否支持StyleSheet类型操作通过<link>元素和<style>元素包含的样式表。

<script type="text/javascript">
window.onload = function(){
var box = document.getElementById('box');
alert(document.implementation.hasFeature('StyleSheets', '2.0')); //检测是否支持 链接式或内联式样式表
alert(document.getElementsByTagName('link')[0]); //HTMLLinkElement ,如果没有时undefined
alert(document.getElementsByTagName('style')[0]); //HTMLStyleElement ,如果没有时undefined
}
</script>
<style type="text/css">
.aaa{
font-size:20px;
color:red;
background:#ccc;
}
.bbb{
font-size:30px;
color:blue;
background:orange;
}
.ccc{
float:right;
}
</style>
</head>
<body>
<div id="box" class="aaa">测试Div</div>
</body>

  

  

二、获取CSSStyleSheet对象  

  这两个元素本身返回的是 HTMLLinkElement 和 HTMLStyleElement 类型,但CSSStyleSheet 类型更加通用一些。得到这个类型非 IE 使用 sheet 属性,IE 使用 styleSheet;

<script type="text/javascript">
window.onload = function(){
var box = document.getElementById('box'); var style = document.getElementsByTagName('style')[0];
//var sheet = style.sheet;//IE6,7,8不支持
//var sheet = style.styleSheet;//非IE不支持 //做兼容
var sheet = style.sheet || style.styleSheet; //得到 CSSStyleSheet
alert(sheet);
} </script>
<style type="text/css">
.aaa{
font-size:20px;
color:red;
background:#ccc;
}
.bbb{
font-size:30px;
color:blue;
background:orange;
}
.ccc{
float:right;
}
</style>
</head>
<body>
<div id="box" class="aaa">测试Div</div>
</body>

  除了上面的方法可以得到 CSSStyleSheet 类型,还有一种方法是通过 document 的styleSheets 属性来获取。所有浏览器都兼容的

<script type="text/javascript">
window.onload = function(){
//var sheet = document.styleSheets;//得到的[object StyleSheetList]集合
var sheet = document.styleSheets[0];//得到第一个CSS样式表对象
alert(sheet);
} </script>
<style type="text/css">
.aaa{
font-size:20px;
color:red;
background:#ccc;
}
.bbb{
font-size:30px;
color:blue;
background:orange;
}
.ccc{
float:right;
}
</style>
</head>
<body>
<div id="box" class="aaa">测试Div</div>
</body>

三、CSSStyleSheet对象的属性和方法

    

<script type="text/javascript">
window.onload = function(){
//var sheet = document.styleSheets;        //得到的[object StyleSheetList]集合
var sheet = document.styleSheets[0];        //得到第一个CSS样式表对象
//alert(sheet.disabled);               //false,可设置为 true,设置为true后样式被禁用,网页的样式也就没有了
//alert(sheet.href);               //css 的 URL,如果是内联样式表,不是使用link链接进来的为null
//alert(sheet.media);             //MediaList,集合 支持度也不是很好
//alert(sheet.media[0]);           //第一个 media 的值
//alert(sheet.title);             //得到 title 属性的值 alert(sheet.cssRules);             //CSSRuleList,样式表规则集合 样式规则就是一群样式表示一个规则
alert(sheet.cssRules[0]);          //得到的第一个规则,还是一个集合
alert(sheet.cssRules[0].cssText);      //把第一个规则的css文本即所有属性和值获取到
alert(sheet.cssRules[0].selectorText);      //得到第一个规则的css选择符
//sheet.deleteRule(0);           //删除第一个样式规则
sheet.insertRule("body {background-color:red}", 0);   //在第一个位置添加一个样式规则
} </script>
<style type="text/css">
.aaa{
font-size:20px;
color:red;
background:#ccc;
}
.bbb{
font-size:30px;
color:blue;
background:orange;
}
.ccc{
float:right;
}
</style>
</head>
<body>
<div id="box" class="aaa">测试Div</div>
</body>

  cssRules、deleteRule、insertRule这三个方法IE6,7,8不支持,可以使用下面的替代方法,但只能支持IE

<script type="text/javascript">
window.onload = function(){
//var sheet = document.styleSheets;//得到的[object StyleSheetList]集合
var sheet = document.styleSheets[0];//得到第一个CSS样式表对象
alert(sheet.rules);           //代替 cssRules 的 IE 版本
sheet.removeRule(0);         //代替 deleteRule 的 IE 版本
sheet.addRule("body", "background-color:red", 0);  //代替 insertRule 的 IE 版本
} </script>
<style type="text/css">
.aaa{
font-size:20px;
color:red;
background:#ccc;
}
.bbb{
font-size:30px;
color:blue;
background:orange;
}
.ccc{
float:right;
}
</style>
</head>
<body>
<div id="box" class="aaa">测试Div</div>
</body>

   跨浏览器兼容

<script type="text/javascript">
window.onload = function(){
//var sheet = document.styleSheets;//得到的[object StyleSheetList]集合
var sheet = document.styleSheets[0];//得到第一个CSS样式表对象 //跨浏览器兼容获取rules
var rules = sheet.cssRules || sheet.rules;
alert(rules); //跨浏览器兼容删除某条规则 position这个参数表示第一条规则
function deleteRule(sheet,position){
if(sheet.deleteRule){
sheet.deleteRule(position);
}else if(sheet.removeRule){
sheet.removeRule(position);
}
} //跨浏览器兼容按参数添加一条规则
//第一个参数表示sheet(那个CSS文本对象)第二个参数是选择符,第三个参数表示css样式文本,第四个参数表示插入的位置
function insertRule(sheet,selectorText,cssText,position){
if(sheet.insertRule){
sheet.insertRule(selectorText+"{"+cssText+"}", position);
}else if(sheet.addRule){
sheet.addRule(selectorText,cssText,position);
}
}
} </script>
<style type="text/css">
.aaa{
font-size:20px;
color:red;
background:#ccc;
}
.bbb{
font-size:30px;
color:blue;
background:orange;
}
.ccc{
float:right;
}
</style>
</head>
<body>
<div id="box" class="aaa">测试Div</div>
</body>

四、Rules 属性

  通过 CSSRules 属性(非 IE)和 rules 属性(IE),我们可以获得样式表的规则集合列表。这样我们就可以对每个样式进行具体的操作了。
  

<script type="text/javascript">
window.onload = function(){
var sheet = document.styleSheets[0]; //CSSStyleSheet
var rules = sheet.cssRules || sheet.rules; //CSSRuleList,样式表的规则集合列表
var rule = rules[0]; //CSSStyleRule,样式表第一个规则 alert(rule.cssText); //当前规则的样式文本
alert(rule.selectorText); //#box,样式的选择符
alert(rule.style.color); //red,得到具体样式值 //Chrome 浏览器在本地运行时会出现问题,rules 会变成 null,只要把它放到服务器上允许即可正常。
}
</script>
<style type="text/css">
.aaa{
font-size:20px;
color:red;
background:#ccc;
}
.bbb{
font-size:30px;
color:blue;
background:orange;
}
.ccc{
float:right;
}
</style>
</head>
<body>
<div id="box" class="aaa">测试Div</div>
</body>

五、总结三种操作 CSS 的方法

  第一种 :通过style属性操作行内样式,可读可写;

  第二种:通过计算后的样式操作行内、内联和链接,使用 getComputedStyle 或 currentStyle,可读不可写;
  第三种 cssRules 或 rules,内联和链接可读可写。

JavaScript的DOM_StyleSheet操作内联或链接样式表的更多相关文章

  1. 内联式css样式,直接写在现有的HTML标签中

    CSS样式可以写在哪些地方呢?从CSS 样式代码插入的形式来看基本可以分为以下3种:内联式.嵌入式和外部式三种.这一小节先来讲解内联式. 内联式css样式表就是把css代码直接写在现有的HTML标签中 ...

  2. JavaScript 获取和修改 内联样式

    JavaScript 获取和修改 内联样式 版权声明:未经授权,严禁转载分享! 元素的样式 HTML 元素的 style 属性返回一个 CSSStyleDeclaration 类型的对象. Style ...

  3. [转]sql:除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询

    执行sql语句: select * from ( select * from tab where ID>20 order by userID desc ) as a order by date ...

  4. [sql Server]除非另外还指定了TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效

    今天遇到一个奇怪的问题,项目突然要从mysql切换到sql server数据库,包含order by 子句的嵌套子查询报错. 示例:select top 10 name,age,sex from ( ...

  5. sql:除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询

    执行sql语句: select * from ( select * from tab where ID>20 order by userID desc ) as a order by date ...

  6. ORDER BY 子句在视 图、内联函数、派生表、子查询和公用表表达式中无效

    SQL语句: select * from (select distinct t2.issue,cashmoney from (select distinct issue from lot_gamepa ...

  7. javascript 读取内联之外的样式(style、currentStyle、getComputedStyle区别介绍) (转载)

    样式表有三种方式: 内嵌样式(inline Style) :是写在Tag里面的,内嵌样式只对所有的Tag有效.   (也称作“内联样式”) 内部样式(internal Style Sheet):是写在 ...

  8. 除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。

    在 SELECT 后加 TOP 100 PERCENT .

  9. JavaScript的DOM操作获取元素的大小

    通过 style 内联获取元素的大小 需要注意的是style 获取只能获取到行内 style 属性的 CSS 样式中的宽和高,如果有获取:如果没有则返回空. <!DOCTYPE html> ...

随机推荐

  1. ASP.NET 简单的柱形图实现(附带示例)

    对于一些内部系统的项目,各种图表是在所难免的,因为图表可以更加清晰的表达出想看到的数据. 因为之前从来没有做过关于图表的东西,唯一能想到的就是“验证码”,所以应该是一个思路,用GDI去搞. 数据懒着去 ...

  2. mysql分表,批量生成数据

    一.mysql的分表策略 根据经验,Mysql表数据一般达到百万级别,查询效率会很低,容易造成表锁,甚至堆积很多连接,直接挂掉: 1,水平分割: 水平(横向)拆分:将同一个表的数据进行分块保存到不同的 ...

  3. 10、List、Set

    List接口 List接口的特点 *A:List接口的特点: a:它是一个元素存取有序的集合. 例如,存元素的顺序是11.22.33.那么集合中,元素的存储就是按照11.22.33的顺序完成的). b ...

  4. 06-码蚁JavaWeb之Servlet生命周期与基本配置

    学习地址:[撩课-JavaWeb系列1之基础语法-前端基础][撩课-JavaWeb系列2之XML][撩课-JavaWeb系列3之MySQL][撩课-JavaWeb系列4之JDBC][撩课-JavaWe ...

  5. vim 配置文件.vimrc,高亮+自动缩进+行号+折叠+优化

    将一下代码copy到 用户目录下 新建文件为  .vimrc保存即可生效: 如果想所有用户生效 请修改 /etc/vimrc (建议先cp一份)"====================== ...

  6. K:找寻数组中第n大的数组元素的三个算法

    相关介绍:  给定一个数组,找出该数组中第n大的元素的值.其中,1<=n<=length.例如,给定一个数组A={2,3,6,5,7,9,8,1,4},当n=1时,返回9.解决该问题的算法 ...

  7. python循环删除列表里的元素!漏删!

    li = [1,2,3,4,5,6] for i in li: if i<3: li.remove(i) print(li) #输出的结果是 [2,3,4,5,6]    2没有remove掉 ...

  8. [翻译]Review——Learn these core JavaScript concepts in just a few minutes

    Learn these core JavaScript concepts in just a few minutes(只需几分钟即可学习这些核心JavaScript概念) 原文地址:https://m ...

  9. Working C# code for MySql5.5 Stored Procedures IN parameters

    MySQL5.5存储过程: #插入一条 涂聚文 DELIMITER $$ DROP PROCEDURE IF EXISTS `geovindu`.`proc_Insert_BookKindList` ...

  10. 01--CSS的引入方式及CSS选择器

    一 CSS介绍 现在的互联网前端分三层: a.HTML:超文本标记语言.从语义的角度描述页面结构. b.CSS:层叠样式表.从审美的角度负责页面样式. c.JS:JavaScript .从交互的角度描 ...