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框架(iframe)操作总结
Apr 16 Javascript
javascript关于open.window子页面执行完成后刷新父页面的问题分析
Apr 27 Javascript
浅析2种JavaScript继承方式
Dec 04 Javascript
Node.js实用代码段之获取Buffer对象字节长度
Mar 17 Javascript
Bootstrap Table使用方法详解
Aug 01 Javascript
jQuery监听浏览器窗口大小的变化实例
Feb 07 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
May 11 Javascript
webpack实现热加载自动刷新的方法
Jul 30 Javascript
基于JSONP原理解析(推荐)
Dec 04 Javascript
node 使用 async 控制并发的方法
May 07 Javascript
vuex 多模块时 模块内部的mutation和action的调用方式
Jul 24 Javascript
jquery插件实现代码雨特效
Apr 24 jQuery
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
长波有什么东西
2021/03/01 无线电
php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
2010/10/22 PHP
php中用socket模拟http中post或者get提交数据的示例代码
2013/08/08 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
2015/01/26 PHP
js类中获取外部函数名的方法
2007/08/19 Javascript
比较简单的一个符合web标准的JS调用flash方法
2007/11/29 Javascript
javascript XML数据显示为HTML一例
2008/12/23 Javascript
validator验证控件使用代码
2010/11/23 Javascript
异步javascript的原理和实现技巧介绍
2012/11/08 Javascript
c#程序员对TypeScript的认识过程
2015/06/19 Javascript
基于javascript数组实现图片轮播
2016/05/02 Javascript
jQuery实现点击表格单元格就可以编辑内容的方法【测试可用】
2016/08/01 Javascript
js实现省份下拉菜单效果
2017/02/15 Javascript
mac上node.js环境的安装测试
2017/07/03 Javascript
基于Vue2x的图片预览插件的示例代码
2018/05/14 Javascript
Node错误处理笔记之挖坑系列教程
2018/06/05 Javascript
微信小程序实现无限滚动列表
2020/05/29 Javascript
如何从头实现一个node.js的koa框架
2019/06/17 Javascript
vue点击当前路由高亮小案例
2019/09/26 Javascript
vue轮播组件实现$children和$parent 附带好用的gif录制工具
2019/09/26 Javascript
PyTorch学习笔记之回归实战
2018/05/28 Python
Python 字符串类型列表转换成真正列表类型过程解析
2019/08/26 Python
Python单元测试与测试用例简析
2019/11/09 Python
python新式类和经典类的区别实例分析
2020/03/23 Python
Python生成器传参数及返回值原理解析
2020/07/22 Python
html2 canvas生成清晰的图片实现打印功能
2019/09/23 HTML / CSS
越南电子产品购物网站:FPT Shop
2017/12/02 全球购物
加拿大床上用品、家居装饰、厨房和浴室产品购物网站:Linen Chest
2018/06/05 全球购物
大学新生欢迎词
2014/01/10 职场文书
《搭石》教学反思
2014/04/07 职场文书
小学庆六一活动总结
2014/08/28 职场文书
实习单位证明范例
2014/11/17 职场文书
单位领导婚礼致辞
2015/07/28 职场文书
教你如何使用Python下载B站视频的详细教程
2021/04/29 Python
Nginx配置Https安全认证的实现
2021/05/26 Servers
Python Pandas常用函数方法总结
2021/06/15 Python