乐未
玫莎
妙公子
Mikit前端框架

JavaScript获取非行间样式/定义样式

html节点的样式分为以下几种
(1)浏览器默认样式
(2)引用样式(引用外部css文件的样式、style标签内定义的样式)
    引用外部css样式:<link rel="stylesheet" href="css/style.css" type="text/css">
    style标签内:<style> width:100px; </style>
(3)行间样式(节点style属性定义的样式)比如:<div style="width:100px;"></div>

有些童鞋会问:为什么要获取“非行间样式”?
有时候在用JS动态设置一个元素的样式的时候要同时考虑style="display:none"和样式表里面的elem {display:none}这两种情况。举个简单的例子说明:如果单击一个按钮让一个div元素显示或隐藏(单击按钮时如果div默认是隐藏的就显示,反之隐藏)。首先要获取div元素默认的显示状态,如果这时只获取行间样式而样式表里设置了DIV元素的display的话获取的样式就不那么准确。所以除了行间样式外样式表内的非行间样式也要同时获取才行。

下面就是获取非行间样式的示例:

HTML代码:
<style>
    *{ text-align:center;}
    input{ margin-top:30px; padding:10px 20px;}
    #div1{ width:500px; height:300px; background:red; margin:10px   auto;}
</style>

<input type="button" value="style" id="btn" />
<div id="div1"></div>

 

 javascript代码如下:

 1  <script>
 2 //获取非行间css样式
 3 function getStyle(obj,attr){    //获取非行间样式,obj是对象,attr是值
 4     if(obj.currentStyle){   //针对ie获取非行间样式
 5         return obj.currentStyle[attr];
 6     }else{
 7         return getComputedStyle(obj,false)[attr];   //针对非ie
 8     };
 9 };
10 //为对象写入/获取css样式
11 function css(obj,attr,value){   //对象,样式,值。传2个参数的时候为获取样式,3个是设置样式
12     if(arguments.length == 2){  //arguments参数数组,当参数数组长度为2时表示获取css样式
13         return getStyle(obj,attr);  //返回对象的非行间样式用上面的getStyle函数
14     }else{
15         if(arguments.length == 3){  //当传三个参数的时候为设置对象的某个值
16             obj.style[attr] = value;
17         };
18     };
19 };
20 window.onload = function(){
21     var oDiv = document.getElementById("div1");
22     var oBtn = document.getElementById("btn");
23     oBtn.onclick = function(){
24         alert(getStyle(oDiv,"height"));
25         css(oDiv,"background","green");
26         alert(css(oDiv,"width"));
27     };
28 };
29 </script>

 

posted @ 2016-04-12 17:53  Missra.Com  阅读(455)  评论(0编辑  收藏  举报