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 相关文章推荐
JS面向对象、prototype、call()、apply()
May 14 Javascript
js 异步处理进度条
Apr 01 Javascript
基于jQuery的简单九宫格实现代码
Aug 09 Javascript
js新闻滚动 js如何实现新闻滚动效果
Jan 07 Javascript
Javascript自定义函数判断网站访问类型是PC还是移动终端
Jan 10 Javascript
JavaScript中toString()方法的使用详解
Jun 05 Javascript
bootstrap中使用google prettify让代码高亮的方法
Oct 21 Javascript
jQuery使用ajax方法解析返回的json数据功能示例
Jan 10 Javascript
vue过渡和animate.css结合使用详解
Jun 14 Javascript
聊聊Vue.js的template编译的问题
Oct 09 Javascript
jQuery操作attr、prop、val()/text()/html()、class属性
May 23 jQuery
小程序自动化测试的示例代码
Aug 11 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中session的实现原理以及大网站应用应注意的问题
2013/06/17 PHP
PHP+Mysql实现多关键字与多字段生成SQL语句的函数
2014/11/05 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
javascript编程起步(第四课)
2007/02/27 Javascript
javascript级联下拉列表实例代码(自写)
2013/05/10 Javascript
JS预览图像将本地图片显示到浏览器上
2013/08/25 Javascript
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
js+HTML5实现canvas多种颜色渐变效果的方法
2015/06/05 Javascript
基于jQuery仿淘宝产品图片放大镜特效
2020/10/19 Javascript
Underscore之Array_动力节点Java学院整理
2017/07/10 Javascript
JavaScript内存泄漏的处理方式
2017/11/20 Javascript
解析Angular 2+ 样式绑定方式
2018/01/15 Javascript
解决angular2 获取到的数据无法实时更新的问题
2018/08/31 Javascript
示例vue 的keep-alive缓存功能的实现
2018/12/13 Javascript
3分钟读懂移动端rem使用方法(推荐)
2019/05/06 Javascript
在layer弹层layer.prompt中,修改placeholder的实现方法
2019/09/27 Javascript
vue实现文字加密功能
2019/09/27 Javascript
关于vue里页面的缓存详解
2019/11/04 Javascript
vue-amap根据地址回显地图并mark的操作
2020/11/03 Javascript
python实现矩阵乘法的方法
2015/06/28 Python
Python安装使用命令行交互模块pexpect的基础教程
2016/05/12 Python
Python Sqlite3以字典形式返回查询结果的实现方法
2016/10/03 Python
python实现读取excel文件中所有sheet操作示例
2019/08/09 Python
python tornado使用流生成图片的例子
2019/11/18 Python
Python进程Multiprocessing模块原理解析
2020/02/28 Python
Python读取VOC中的xml目标框实例
2020/03/10 Python
解决python调用自己文件函数/执行函数找不到包问题
2020/06/01 Python
python try...finally...的实现方法
2020/11/25 Python
CSS3实现div从下往上滑入滑出效果示例
2020/04/28 HTML / CSS
运动会四百米广播稿
2014/01/19 职场文书
物流专员岗位职责
2014/02/17 职场文书
火灾现场处置方案
2014/05/28 职场文书
小学生家长意见
2015/06/03 职场文书
《鸟的天堂》教学反思
2016/02/19 职场文书
Django分页器的用法你都了解吗
2021/05/26 Python
Python中的套接字编程是什么?
2021/06/21 Python