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 相关文章推荐
location.href语句与火狐不兼容的问题
Jul 04 Javascript
使用Grunt.js管理你项目的应用说明
Apr 24 Javascript
比较新旧两个数组值得增加和删除的JS代码
Oct 30 Javascript
jQuery实现的放大镜效果示例
Sep 13 Javascript
ES5 ES6中Array对象去除重复项的方法总结
Apr 27 Javascript
Vue应用部署到服务器的正确方式
Jul 15 Javascript
weex slider实现滑动底部导航功能
Aug 28 Javascript
js实现unicode码字符串与utf8字节数据互转详解
Mar 21 Javascript
Vue中使用matomo进行访问流量统计的实现
Nov 05 Javascript
JS简易计算器实例讲解
Jun 30 Javascript
解决vue项目axios每次请求session不一致的问题
Oct 24 Javascript
JavaScript分页组件使用方法详解
Jul 26 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
PHP页面间参数传递的四种方法详解
2013/06/09 PHP
php常用的url处理函数总结
2014/11/19 PHP
php实现产品加入购物车功能(1)
2020/07/23 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
2020/04/06 PHP
jquery load事件(callback/data)使用方法及注意事项
2013/02/06 Javascript
javascript 数字格式化输出的实现代码
2013/12/10 Javascript
JS 数字转换研究总结
2013/12/26 Javascript
用C/C++来实现 Node.js 的模块(二)
2014/09/24 Javascript
JS填写银行卡号每隔4位数字加一个空格
2016/12/19 Javascript
Bootstrap 模态框(Modal)插件代码解析
2016/12/21 Javascript
浅谈jQuery操作类数组的工具方法
2016/12/23 Javascript
JavaScript日期对象(Date)基本用法示例
2017/01/18 Javascript
vue.js的安装方法
2017/05/12 Javascript
微信小程序实现星级评分和展示
2018/07/05 Javascript
vue 界面刷新数据被清除 localStorage的使用详解
2018/09/16 Javascript
[01:21]DOTA2周边文化主题展 神秘商店火热开售
2017/07/30 DOTA
从Python的源码浅要剖析Python的内存管理
2015/04/16 Python
python绘图方法实例入门
2015/05/19 Python
详解Python中的四种队列
2018/05/21 Python
使用Selenium破解新浪微博的四宫格验证码
2018/10/19 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
2018/12/05 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
Python Celery异步任务队列使用方法解析
2020/08/10 Python
CSS3 calc()会计算属性详解
2018/02/27 HTML / CSS
使用 css3 transform 属性来变换背景图的方法
2019/05/07 HTML / CSS
Theo + George官方网站:都柏林时尚品牌
2019/04/08 全球购物
HomeAway英国:全球领先的度假租赁在线市场
2020/02/03 全球购物
用缩写的指针比较"if(p)" 检查空指针是否可靠?如果空指针的内部表达不是0会怎么样?
2014/01/05 面试题
初中生物教学反思
2014/01/10 职场文书
办公室文员自荐书
2014/02/03 职场文书
品德评语大全
2014/05/05 职场文书
推荐信怎么写
2014/05/09 职场文书
奥巴马的演讲稿
2014/05/15 职场文书
停电放假通知
2015/04/14 职场文书
Vue接口封装的完整步骤记录
2021/05/14 Vue.js
Win11安装升级时提示“该电脑必须支持安全启动”
2022/04/19 数码科技