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中发布/订阅模式的简单实例
Nov 05 Javascript
JavaScript三元运算符的多种使用技巧
Apr 16 Javascript
Jquery实现瀑布流布局(备有详细注释)
Jul 31 Javascript
JS通过Cookie判断页面是否为首次打开
Feb 05 Javascript
教你用javascript实现随机标签云效果_附代码
Mar 16 Javascript
微信小程序 数据封装,参数传值等经验分享
Jan 09 Javascript
自定义vue组件发布到npm的方法
May 09 Javascript
详解js的视频和音频采集
Aug 09 Javascript
使用D3.js构建实时图形的示例代码
Aug 28 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
Apr 26 Javascript
jQuery实现html可联动的百分比进度条
Mar 26 jQuery
JavaScript执行机制详细介绍
Dec 06 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脚本的10个技巧(4)
2006/10/09 PHP
教你如何在CI框架中使用 .htaccess 隐藏url中index.php
2014/06/09 PHP
CodeIgniter输出中文乱码的两种解决办法
2014/06/12 PHP
PHP网站建设的流程与步骤分享
2015/09/25 PHP
swoole锁的机制代码实例讲解
2021/03/04 PHP
Extjs TriggerField在弹出窗口显示不出问题的解决方法
2010/01/08 Javascript
js运动框架_包括图片的淡入淡出效果
2013/05/11 Javascript
JS解决ie6下png透明的方法实例
2013/08/02 Javascript
js 控制图片大小核心讲解
2013/10/09 Javascript
js 限制input只能输入数字、字母和汉字等等
2013/12/18 Javascript
导入extjs、jquery 文件时$使用冲突问题解决方法
2014/01/14 Javascript
JS中使用sort结合localeCompare实现中文排序实例
2014/07/23 Javascript
基于jquery固定于顶部的导航响应浏览器滚动条事件
2014/11/02 Javascript
innerHTML中标签可以换行的方法汇总
2015/08/14 Javascript
判断是否存在子节点的实现代码
2016/05/18 Javascript
JS正则替换掉小括号及内容的方法
2016/11/29 Javascript
Vue 2.x教程之基础API
2017/03/06 Javascript
详解vue+vueRouter+webpack的简单实例
2017/06/17 Javascript
vue结合Echarts实现点击高亮效果的示例
2018/03/17 Javascript
使用angular-cli webpack创建多个包的方法
2018/10/16 Javascript
微信小程序自定义tabbar custom-tab-bar 6s出不来解决方案(cover-view不兼容)
2019/11/01 Javascript
[06:13]DOTA2进化论(修改版)
2013/10/08 DOTA
python正则表达式抓取成语网站
2013/11/20 Python
Python numpy 提取矩阵的某一行或某一列的实例
2018/04/03 Python
Django发送邮件和itsdangerous模块的配合使用解析
2019/08/10 Python
python rolling regression. 使用 Python 实现滚动回归操作
2020/06/08 Python
amazeui时间组件的实现示例
2020/08/18 HTML / CSS
shallow copy和deep copy的区别
2016/05/09 面试题
控制工程专业个人求职信
2013/09/25 职场文书
质量承诺书范文
2014/03/27 职场文书
安全横幅标语
2014/06/09 职场文书
森林防火标语
2014/06/23 职场文书
大学生撤销处分思想汇报
2014/09/12 职场文书
黑暗中的舞者观后感
2015/06/18 职场文书
有关保护环境的宣传标语100条
2019/08/07 职场文书
Nginx反向代理配置的全过程记录
2021/06/22 Servers