JS之获取样式的简单实现方法(推荐)


Posted in Javascript onSeptember 13, 2016

基本代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    div{
      color:yellow;
    }
  </style>
</head>
<body>
  <div style="width:100px;height:100px;background-color:red">This is div</div>
</body>
</html>

1.通过使用element.style属性来获取

<script>
  var div = document.getElementsByTagName("div")[0];
  console.log(div.style.color); //""
  console.log(div.style.backgroundColor); //red
</script>

element.style属性只能获取行内样式,不能获取<style>标签中的样式,也不能获取外部样式

由于element.style是元素的属性,我们可以对属性重新赋值来改写元素的显示。 

<script>
    var div = document.getElementsByTagName("div")[0];
    div.style['background-color'] = "green";
    console.log(div.style.backgroundColor); //green
  </script>

2.通过getComputedStyle和currentStyle来获取样式

getComputedStyle的使用环境是chrome/safari/firefox IE 9,10,11

<script>
  var div = document.getElementsByTagName("div")[0];
  var styleObj = window.getComputedStyle(div,null);
  console.log(styleObj.backgroundColor); //red
  console.log(styleObj.color); //yellow
</script>

currentStyle在IE里能得到完美支持,chrome不支持,ff不支持

<script>
    var div = document.getElementsByTagName("div")[0];
    var styleObj = div.currentStyle;
    console.log(styleObj.backgroundColor); //red
    console.log(styleObj.color); //yellow
  </script>

3.ele.style和getComputedStyle或者currentStyle的区别

3.1 ele.style是读写的,而getComputedStyle和currentStyle是只读的

3.2 ele.style只能得到行内style属性里面设置的CSS样式,而getComputedStyle和currentStyle还能得到其他的默认值

3.3 ele.style得到的是style属性里的样式,不一定是最终样式,而其他两个得到的是元素的最终CSS样式

4.获取样式兼容性写法

<script>
    //获取非行间样式(style标签里的样式或者link css文件里的样式),obj是元素,attr是样式名
    function getStyle(obj,attr){
       //针对IE
       if(obj.currentStyle){
         return obj.currentStyle[attr];               //由于函数传过来的attr是字符串,所以得用[]来取值
       }else{
         //针对非IE
         return window.getComputedStyle(obj,false)[attr];
       }
    }
    /*
       获取或者设置css属性
    
    */
    function css(obj,attr,value){
       if(arguments.length == 2){
         return getStyle(obj,attr);
       }else{   
         obj.style[attr] = value;
       }
    }
  </script>

 5.window.getComputedStyle(ele[,pseudoElt]);

 第二个参数如果是null或者省略,则获取得到是ele的CSSStyleDeclaration对象

如果是一个伪类,则获取到的是伪类的CSSStyleDeclaration对象

<style>
div{
  width:200px;
  height:200px;
  background-color:#FC9;
  font-size:20px;
  text-align:center;  
}
div:after{
  content:"This is after";
  display:block;
  width:100px;
  height:100px;
  background-color:#F93;
  margin:0 auto;
  line-height:50px;
    
}
</style>

<body>
  <div id='myDiv'>
    This is div
  </div> 
  <input id='btn' type="button" value='getStyle'/> 
  <script>
    var btn = document.querySelector('#btn');
    btn.onclick = function(){
      var div = document.querySelector('#myDiv');
      var styleObj = window.getComputedStyle(div,'after');
      console.log(styleObj['width']);
    }
  </script>
</body>

 6.getPropertyValue获取CSSStyleDeclaration对象中的指定属性值

<script>
    var div = document.getElementsByTagName("div")[0];
    var styleObj = window.getComputedStyle(div,null);
    console.log(styleObj.getPropertyValue("background-color"));
</script>

getPropertyValue(propertyName);中的propertyName不能是驼峰式表示

obj.currentStyle['margin-left'] 有效

obj.currentStyle['marginLeft']  有效   

window.getComputedStyle(obj,null)['margin-left']  有效

window.getComputedStyle(obj,null)['marginLeft']  有效

window.getComputedStyle(obj,null).getPropertyValue('margin-left')  有效

window.getComputedStyle(obj,null).getPropertyValue('marginLeft')   无效

obj.currentStyle.width   有效

obj.currentStyle.background-color 无效

obj.currentStyle.backgroundColor  有效

window.getComputedStyle(obj,null).width  有效

window.getComputedStyle(obj,null).background-color  无效

window.getComputedStyle(obj,null).backgroundColor 有效

综上,就是带有"-"的属性不能直接点出来,所以有getPropertyValue方法来处理,但是可以用[]来取代getPropertyValue

7.defaultView

在许多在线的演示代码中, getComputedStyle 是通过 document.defaultView 对象来调用的。 大部分情况下,这是不需要的, 因为可以直接通过window对象调用。但有一种情况,你必需要使用 defaultView,  那是在firefox3.6上访问子框架内的样式 (iframe)

以上这篇JS之获取样式的简单实现方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript操作cookie_获取与修改代码
May 21 Javascript
JS获取农历日期具体实例
Nov 14 Javascript
jquery学习总结(超级详细)
Sep 04 Javascript
浅谈javascript获取元素transform参数
Jul 24 Javascript
JS原型对象的创建方法详解
Jun 16 Javascript
微信小程序 教程之WXML
Oct 18 Javascript
微信小程序之获取当前位置经纬度以及地图显示详解
May 09 Javascript
BootStrap Select清除选中的状态恢复默认状态
Jun 20 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
Aug 19 jQuery
mpvue开发音频类小程序踩坑和建议详解
Mar 12 Javascript
three.js着色器材质的内置变量示例详解
Aug 16 Javascript
vue编写简单的购物车功能
Jan 08 Vue.js
JS实现可编辑的后台管理菜单功能【附demo源码下载】
Sep 13 #Javascript
轻松实现js弹框显示选项
Sep 13 #Javascript
JS制作图形验证码实现代码
Oct 19 #Javascript
JS防止网页被嵌入iframe框架的方法分析
Sep 13 #Javascript
javascript数组遍历的方法实例分析
Sep 13 #Javascript
jQuery弹出遮罩层效果完整示例
Sep 13 #Javascript
JS简单去除数组中重复项的方法
Sep 13 #Javascript
You might like
php5 and xml示例
2006/11/22 PHP
php mssql 分页SQL语句优化 持续影响
2009/04/26 PHP
AJAX的跨域访问-两种有效的解决方法介绍
2013/06/22 PHP
深入理解PHP之源码目录结构与功能说明
2016/06/01 PHP
24条货真价实的PHP代码优化技巧
2016/07/28 PHP
张孝祥JavaScript学习阶段性总结(2)--(X)HTML学习
2007/02/03 Javascript
JavaScript prototype属性深入介绍
2012/11/27 Javascript
JavaScript中获取样式的原生方法小结
2014/10/08 Javascript
javascript制作游戏开发碰撞检测的封装代码
2015/03/31 Javascript
jQuery Validate表单验证深入学习
2015/12/18 Javascript
深入理解js数组的sort排序
2016/05/28 Javascript
学习Bootstrap滚动监听 附调用方法
2016/07/02 Javascript
完美实现js选项卡切换效果(二)
2017/03/08 Javascript
Vue中fragment.js使用方法详解
2017/03/09 Javascript
JS实现前端动态分页码代码实例
2020/06/02 Javascript
[56:48]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
[38:39]完美世界DOTA2联赛循环赛 IO vs GXR BO2第二场 11.04
2020/11/05 DOTA
python求素数示例分享
2014/02/16 Python
python实现的简单抽奖系统实例
2015/05/22 Python
Python之日期与时间处理模块(date和datetime)
2017/02/16 Python
Python 加密的实例详解
2017/10/09 Python
Python使用文件锁实现进程间同步功能【基于fcntl模块】
2017/10/16 Python
浅谈Python中的私有变量
2018/02/28 Python
python  创建一个保留重复值的列表的补码
2018/10/15 Python
python利用跳板机ssh远程连接redis的方法
2019/02/19 Python
Python实现一个优先级队列的方法
2020/07/31 Python
Flask中jinja2的继承实现方法及实例
2021/03/03 Python
canvas学习笔记之绘制简单路径
2019/01/28 HTML / CSS
后勤自我鉴定
2013/10/13 职场文书
闭幕式主持词
2014/04/02 职场文书
世博会口号
2014/06/20 职场文书
爱耳日宣传活动总结
2014/07/05 职场文书
趣味运动会广播稿
2014/09/13 职场文书
警示教育片观后感
2015/06/17 职场文书
2016幼儿园新学期寄语
2015/12/03 职场文书
基于nginx实现上游服务器动态自动上下线无需reload的实现方法
2021/03/31 Servers