JavaScript的DOM_StyleSheet操作内联或链接样式表
使用 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操作内联或链接样式表的更多相关文章
- 内联式css样式,直接写在现有的HTML标签中
CSS样式可以写在哪些地方呢?从CSS 样式代码插入的形式来看基本可以分为以下3种:内联式.嵌入式和外部式三种.这一小节先来讲解内联式. 内联式css样式表就是把css代码直接写在现有的HTML标签中 ...
- JavaScript 获取和修改 内联样式
JavaScript 获取和修改 内联样式 版权声明:未经授权,严禁转载分享! 元素的样式 HTML 元素的 style 属性返回一个 CSSStyleDeclaration 类型的对象. Style ...
- [转]sql:除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询
执行sql语句: select * from ( select * from tab where ID>20 order by userID desc ) as a order by date ...
- [sql Server]除非另外还指定了TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效
今天遇到一个奇怪的问题,项目突然要从mysql切换到sql server数据库,包含order by 子句的嵌套子查询报错. 示例:select top 10 name,age,sex from ( ...
- sql:除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询
执行sql语句: select * from ( select * from tab where ID>20 order by userID desc ) as a order by date ...
- ORDER BY 子句在视 图、内联函数、派生表、子查询和公用表表达式中无效
SQL语句: select * from (select distinct t2.issue,cashmoney from (select distinct issue from lot_gamepa ...
- javascript 读取内联之外的样式(style、currentStyle、getComputedStyle区别介绍) (转载)
样式表有三种方式: 内嵌样式(inline Style) :是写在Tag里面的,内嵌样式只对所有的Tag有效. (也称作“内联样式”) 内部样式(internal Style Sheet):是写在 ...
- 除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。
在 SELECT 后加 TOP 100 PERCENT .
- JavaScript的DOM操作获取元素的大小
通过 style 内联获取元素的大小 需要注意的是style 获取只能获取到行内 style 属性的 CSS 样式中的宽和高,如果有获取:如果没有则返回空. <!DOCTYPE html> ...
随机推荐
- jsonp全国天气案例
案例1: 1.获取跨域数据 2.将数据按照下面的效果放到body里面 key: f49570d39b02b3c203526b5d8255aa61 079179afb105ce2bae9f5d0 ...
- 从java到web前端再到php,一路走来的小总结
java的学习: 初学者对Java的学习,上来的感觉都是比较难,感觉java的东西很多,如此多的类和接口.有时还弄不懂为啥实例化出一个int空数组为什么数组中默认都是0,实例化一个空字符串数组时(St ...
- ecstore关于smarty语法调用
以下是smarty语法 转自http://www.phpwindow.com/ecstore_smarty2.html assign 属性 类型 是否必须 描述 var string yes 被赋值的 ...
- (JSP)关于手机端(尤其是苹果手机)pdf文件无法打开的解决方案
流的方式下载附件 <!-- @author :daisy @date : 2011-12-04 @note : 从数据库中读取BLOB图片显示 --> <%@page import= ...
- java核心技术-多线程基础
进程.线程 进程(Process) 是程序的运行实例.例如,一个运行的 Eclipse 就是一个进程.进程是程序向操作系统申请资源(如内存空间和文件句柄)的基本单位.线程(Thread)是进程中可 ...
- linux ubuntu 安装nginx
参考原文 在Ubuntu下安装Nginx有以下方法,但是如果想要安装最新版本的就必须下载源码包编译安装. 一.基于APT源安装 sudo apt-get install nginx 安装好的文件位置: ...
- 图解 CMS 垃圾回收机制,你值得拥有(转 强烈推荐)
首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 Java小组 工具资源 - 导航条 - 首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 Java小组 工具资源 ...
- java 自定义泛型
package com.direct.demo; import java.util.ArrayList; import java.util.HashMap; import java.util.Link ...
- Luogu4433:[COCI2009-2010#1] ALADIN(类欧几里德算法)
先套用一个线段树维护离散化之后的区间的每一段的答案 那么只要考虑怎么下面的东西即可 \[\sum_{i=1}^{n}(A\times i \ mod \ B)\] 拆开就是 \[\sum_{i=1}^ ...
- sublime3下载安装及常用插件、浏览器预览设置
之前与学习前端有关的软件都安装在了实验室电脑上,最近由于要放寒假(也许我寒假回去会学习呢),于是得在笔记本电脑上重新安装一遍.几个软件各种出错,花了一下午才安装好,必须记录下来啊! 这篇文章主要介绍s ...