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 相关文章推荐
Mootools 1.2教程 Tooltips
Sep 15 Javascript
仿中关村在线首页弹出式广告插件(jQuery版)
May 03 Javascript
关于javascript中的typeof和instanceof介绍
Dec 04 Javascript
jquery延迟加载外部js实现代码
Jan 11 Javascript
jquery 绑定回车动作扑捉回车键触发的事件
Mar 26 Javascript
JS实现拖动滚动条评分的效果代码分享
Sep 29 Javascript
微信小程序用户位置权限的获取方法(拒绝后提醒)
Nov 15 Javascript
JS实现根据详细地址获取经纬度功能示例
Apr 16 Javascript
Vue中多元素过渡特效的解决方案
Feb 05 Javascript
JavaScript 类的封装操作示例详解
May 16 Javascript
基于JavaScript实现简单抽奖功能代码实例
Oct 20 Javascript
express异步函数异常捕获示例详解
Nov 30 Javascript
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
构建简单的Webmail系统
2006/10/09 PHP
PHP 可阅读随机字符串代码
2010/05/26 PHP
thinkphp实现图片上传功能
2016/01/13 PHP
分享PHP-pcntl 实现多进程代码
2016/09/30 PHP
PHP实现对xml进行简单的增删改查(CRUD)操作示例
2017/05/19 PHP
php实现socket推送技术的示例
2017/12/20 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
jQuery操作DOM之获取表单控件的值
2015/01/23 Javascript
详解jquery easyui之datagrid使用参考
2016/12/05 Javascript
jQuery实现三级联动效果
2017/03/02 Javascript
详解vue 配合vue-resource调用接口获取数据
2017/06/22 Javascript
JavaScript学习笔记之惰性函数示例详解
2017/08/27 Javascript
javascript性能优化之分时函数的介绍
2018/03/28 Javascript
Vue常用传值方式、父传子、子传父及非父子实例分析
2020/02/24 Javascript
JavaScript面试中常考的字符串操作方法大全(包含ES6)
2020/05/10 Javascript
js+css3实现简单时钟特效
2020/09/13 Javascript
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
2016/01/20 Python
Python 使用os.remove删除文件夹时报错的解决方法
2017/01/13 Python
Python 2/3下处理cjk编码的zip文件的方法
2019/04/26 Python
Python超越函数积分运算以及绘图实现代码
2019/11/20 Python
opencv+python实现均值滤波
2020/02/19 Python
Python tcp传输代码实例解析
2020/03/18 Python
通过自学python能找到工作吗
2020/06/21 Python
python中pathlib模块的基本用法与总结
2020/08/17 Python
Python3+Appium安装及Appium模拟微信登录方法详解
2021/02/16 Python
Mio Skincare美国官网:身体紧致及孕期身体护理
2017/03/05 全球购物
Under Armour安德玛英国官网:美国高端运动科技品牌
2018/09/17 全球购物
Nebula美国官网:便携式投影仪
2019/03/15 全球购物
计算机网络毕业生自荐信
2013/10/01 职场文书
品牌宣传方案
2014/03/21 职场文书
2014年协会工作总结
2014/11/22 职场文书
继承权公证书范本
2015/01/23 职场文书
违纪开除通知书
2015/04/25 职场文书
撤诉申请怎么写
2015/05/19 职场文书
升职自荐书
2019/05/09 职场文书
MySQL基础(一)
2021/04/05 MySQL