Javascript 访问样式表实现代码

再记录一下 Javascript访问样式表
Javascript可以访问网页中元素的style属性,例如:
<div id="main" style="background-color:red"></div>

通过js访问style属性
alert(document.getElementById("main").style.backgroundColor);

通过js改变style属性
document.getElementById("main").style.backgroundColor="blue";

以上代码是我们所熟悉的,但通常我们用样式表来控制元素的外观属性,例如:

JS控制CSS

#main
{
margin-left:200px;
margin-top:70px;
width:200px;
height:100px;
background-color999999;
border:1px solid #666666;
}

Show

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

此时如果我们再使用 alert(document.getElementById("main").style.backgroundColor);

则只能获得一个空值,所以只能通过js去访问样式表了.
document.styleSheets可以获得样式表的集合,因为浏览器之间有很大不同,访问样式表的单独规则也不同.DOM为每一个样式表指定一个cssRules集合,Mozilla和Safari正确实现了这个标准,不过可惜IE中定义这个集合为rules,因此可以使用以下代码来获得正确的对象:
var oCssRules=document.styleSheets[0].cssRules||document.styleSheets[0].rules;

这样就可以获得不同浏览器的CSS集合了.
通过以下JS代码来获得样式表中的样式:


代码如下:

function GetCSS()
{
var oCssRules=document.styleSheets[0].cssRules||document.styleSheets[0].rules;
alert(oCssRules[0].style.backgroundColor);
}

styleSheets[0]表示第一个样式表引用,oCssRules[0]表示第一个样式规则(即#main{}的内容),通过style属性来访问具体的规则.
同理,更改该样式表规则代码如下:


代码如下:

function SetCSS()
{
var oCssRules=document.styleSheets[0].cssRules||document.styleSheets[0].rules;
oCssRules[0].style.backgroundColor="red";
oCssRules[0].style.marginLeft="20px";
oCssRules[0].style.marginTop="20px";
}

但是需要注意的是,因为很多元素有可能关联同一个样式表,所以改变时需要慎重.
除了元素的style对象和css规则外,每个元素还有一个最终样式,最终样式用来告诉我们元素最后是如何显示在屏幕上的,也就是style和css重合计算后的样式.IE和DOM有两种方式来访问此样式,IE中通过currentStyle属性,DOM中使用getComputedStyle()方法.
JS获得最终样式的方法如下:


代码如下:

function GetFinalCSS()
{
var oDiv=document.getElementById("main");
//访问style属性
alert(oDiv.style.backgroundColor);
//IE方法
alert(oDiv.currentStyle.backgroundColor);
//DOM方法,第二个参数为伪元素,如:hover,first-leeter之类
//alert(document.defaultView.getComputeStyle(oDiv,null).backgroundColor);
}

我经常使用currentStyle来获得样式,省去了访问样式表的麻烦
需要注意的是currentStyle是只读属性,不能够对其赋值,因为其是多种样式综合计算后的样式规则,这点并不难理解.
对于getComputedStyle方法,可以通过document.defaultView来调用(IE和Safari不支持此方法).所以,当使用getComputedStyle方法时,最好在多个浏览器上进行测试.

(0)

相关推荐

  • 再谈javascript 动态添加样式规则 W3C校检

    毫无疑问,基于表现与结构相分离的原则,直接导入一个新的样式表是最好的选择,但有些情况就行不通,如我们做一个能拖动的DIV,从设置样式的角度看,就是把它绝对定位,以防影响原来的文档流,然后一点点改变其top与left的值实现移动的效果.由于拖动是有时间概念的,一秒24帧,样式表不可能面面俱到都把它们写进去.因此动态生成样式规则与快速修改样式规则是非常有必要的,W3C为此做了大量的工作,在DOM2.0中,扩充了不少接口. 退一步说,表现与结构相分离也不止导入样式表这一条路.要知道,一共有三种样式类型

  • JS函数实现动态添加CSS样式表文件

    先给出函数. 复制代码 代码如下: varaddSheet=function(){ vardoc,cssCode; if(arguments.length==1){ doc=document; cssCode=arguments[0] }elseif(arguments.length==2){ doc=arguments[0]; cssCode=arguments[1]; }else{ alert("addSheet函数最多接受两个参数!"); } if(!+"v1"

  • JS 控制CSS样式表

    下面先记录一下JS控制CSS所使用的方法. 1.使用javascript更改某个css class的属性... <style type="text/css"> .orig { display: none; } </style> 你想要改变把他的display属性由none改为inline. 解决办法: 在IE里: document.styleSheets[0].rules[0].style.display = "inline"; 在firef

  • JavaScript CSS修改学习第三章 修改样式表

    请注意代码和传统的DHTML的区别.在DHTML你通过直接修改页面上的特定元素来改变样式,而这里的代码修改的是样式表.在这里查看W3C DOM-CSS的兼容性列表.定义 一个页面总是包含一个或者几个样式表,一个样式表里面包含一条或者几条规则,一条规则里有详细的样式声明.这个页面的样式表如下: 复制代码 代码如下: <link rel="stylesheet" href="../quirksmode.css"> <style> <!--

  • JS修改css样式style浅谈

    一.局部改变样式 分为改变直接样式,改变className和改变cssText三种.需要注意的是: 注意大小写: javascript对大小写十分敏感,className不能够把"N"写成"n",cssText也不能够把"T"写成"t",否则无法实现效果. 调用方法: 如果改变className,则事先在样式表中申明类,但调用时不要再跟style,像document.getElementById('obj').style.cl

  • javascript判断ie浏览器6/7版本加载不同样式表的实现代码

    关键点:1.对浏览器版本的判断:2.修改样式表路径 其中第二点也常用在实时修改网页模板.论坛风格的场合,实际上就是修改样式表路径来加载不同的样式表. 代码: 复制代码 代码如下: <script type="text/javascript"> var browser=navigator.appName var b_version=navigator.appVersion var version=b_version.split(";"); try{ //代

  • 使用JavaScript创建新样式表和新样式规则

    如今的这个年代,流行在Web页面上使用了大量的JavaScript,我们需要寻找各种方式来优化它们,使它们更快.我们使用事件委托来让事件监听器更有效率,使用降频技术来限定某些方法的使用次数,使用各种JavaScript加载器来动态加载我们需要的资源,等等.另外一种让页面更高效.更敏捷的方法是动态的添加或移除样式表里的样式,而不需要去查询DOM元素,对每个元素做样式调整.下面我们就来看看如何使用这种技术! 捕获样式表 你的页面上可能引用了不只一个的样式文件,你可以选择其中的一个.如果你指定了某个,

  • JavaScript修改css样式style

    一.局部改变样式 分为改变直接样式,改变className和改变cssText三种.需要注意的是: 注意大小写: javascript对大小写十分敏感,className不能够把"N"写成"n",cssText也不能够把"T"写成"t",否则无法实现效果. 调用方法: 如果改变className,则事先在样式表中申明类,但调用时不要再跟style,像document.getElementById('obj').style.cl

  • javascript 动态修改样式和层叠样式表代码

    W3C DOM2样式规则 ========================================================== CSSStyleSheet对象 CSSStyleSheet对象表示的是所有CSS样式表,包括外部样式表和使用<style type="text/css"></style>标签指定的嵌入式样式表. CSSStyleSheet同样构建于其他的DOM2 CSS对象基础之 上,而CSSStyleRule对象表示的则样式表中的每条

  • JavaScript实现动态创建CSS样式规则方案

    现在Web应用中有大量的JavaScript代码,而我们也一直在追寻各种使他们更快的解决方案. 1.我们通过 事件代理(event delegation) 让事件监听更高效, 2.我们利用 函数降频技术(function debouncing)来限制一段时间内给定方法被调用的次数,请参考:如何防止事件函数的高频触发(中文翻译) 3.我们使用 JavaScript加载器 来加载我们确实需要的那部分资源,等等. 还有一种方式,可以让我们的页面更加的快速和高效.那就是直接通过JS动态地添加和删除样式表

随机推荐