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 相关文章推荐
游戏人文件夹程序 ver 3.0
Jul 14 Javascript
IE php关于强制下载文件的代码
Aug 23 Javascript
Dojo 学习要点
Sep 03 Javascript
让AJAX不依赖后端接口实现方案
Dec 03 Javascript
js实现跟随鼠标移动且带关闭功能的图片广告实例
Feb 26 Javascript
基于OL2实现百度地图ABCD marker的效果
Oct 01 Javascript
AngularJS入门教程之数据绑定用法示例
Nov 01 Javascript
Vue-cli-webpack搭建斗鱼直播步骤详解
Nov 17 Javascript
vue主动刷新页面及列表数据删除后的刷新实例
Sep 16 Javascript
JavaScript中的null和undefined用法解析
Sep 30 Javascript
基于node+vue实现简单的WebSocket聊天功能
Feb 01 Javascript
Ant design vue table 单击行选中 勾选checkbox教程
Oct 24 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中经典方法实现判断多维数组是否为空
2011/10/23 PHP
PHP5权威编程阅读学习笔记 附电子书下载
2012/07/05 PHP
PHP笔记之:日期函数的使用介绍
2013/04/24 PHP
WordPress中is_singular()函数简介
2015/02/05 PHP
PHP面向对象自动加载机制原理与用法分析
2016/10/14 PHP
php分享朋友圈的实现代码
2019/02/18 PHP
搭建PhpStorm+PhpStudy开发环境的超详细教程
2020/09/17 PHP
JavaScript入门教程(6) Window窗口对象
2009/01/31 Javascript
Prototype的Class.create函数解析
2011/09/22 Javascript
学习javascript面向对象 掌握创建对象的9种方式
2016/01/04 Javascript
js闭包学习心得总结
2018/04/17 Javascript
Javascript读取上传文件内容/类型/字节数
2019/04/30 Javascript
使用Easyui实现查询条件的后端传递并自动刷新表格的两种方法
2019/09/09 Javascript
js+canvas实现纸牌游戏
2020/03/16 Javascript
Angular+ionic实现折叠展开效果的示例代码
2020/07/29 Javascript
[22:20]初生之犊-TI4第5名LGD战队纪录片
2014/08/13 DOTA
[01:21:36]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python语言技巧之三元运算符使用介绍
2013/03/04 Python
Python语言实现百度语音识别API的使用实例
2017/12/13 Python
python代码 输入数字使其反向输出的方法
2018/12/22 Python
Python3列表内置方法大全及示例代码小结
2019/05/10 Python
python使用pygame实现笑脸乒乓球弹珠球游戏
2019/11/25 Python
如何教少儿学习Python编程
2020/07/10 Python
python 实现全球IP归属地查询工具
2020/12/18 Python
matplotlib事件处理基础(事件绑定、事件属性)
2021/02/03 Python
惠普美国官方商店:HP Official Store
2016/08/28 全球购物
志愿者服务感言
2014/02/27 职场文书
学习决心书范文
2014/03/11 职场文书
降消项目实施方案
2014/03/30 职场文书
《花瓣飘香》教学反思
2014/04/15 职场文书
运动会加油口号
2014/06/07 职场文书
初中学校对照检查材料
2014/08/19 职场文书
反四风对照检查材料
2014/09/22 职场文书
2015年小学语文教师工作总结
2015/10/23 职场文书
创业计划书之网吧
2019/10/10 职场文书
mysql性能优化以及配置连接参数设置
2022/05/06 MySQL