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中把字符转成ASCII值的函数示例代码
Nov 21 Javascript
jQuery实现平滑滚动的标签分栏切换效果
Aug 28 Javascript
JavaScript比较当前时间是否在指定时间段内的方法
Aug 02 Javascript
bootstrap suggest下拉框使用详解
Apr 10 Javascript
JS 仿支付宝input文本输入框放大组件的实例
Nov 14 Javascript
vue实现在表格里,取每行的id的方法
Mar 09 Javascript
vue双向数据绑定知识点总结
Apr 18 Javascript
使用vue.js在页面内组件监听scroll事件的方法
Sep 11 Javascript
js实现点击展开隐藏效果(实例代码)
Sep 28 Javascript
Javascript实现一朵从含苞到绽放的玫瑰
Mar 30 Javascript
Vue左滑组件slider使用详解
Aug 21 Javascript
处理canvas绘制图片模糊问题
May 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构造方法中析构方法在继承中的表现
2016/04/12 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
2019/05/23 PHP
Laravel 6.2 中添加了可调用容器对象的方法
2019/10/22 PHP
对象特征检测法判断浏览器对javascript对象的支持
2009/07/25 Javascript
百度地图api应用标注地理位置信息(js版)
2013/02/01 Javascript
解决jquery中美元符号命名冲突问题
2014/01/08 Javascript
js调用iframe实现打印页面内容的方法
2014/03/04 Javascript
使用Chart.js图表库制作漂亮的响应式表单
2015/10/28 Javascript
在页面中输出当前客户端时间javascript实例代码
2016/03/02 Javascript
jQuery bt气泡实现悬停显示及移开隐藏功能的方法
2016/07/12 Javascript
jquery实现拖动效果(代码分享)
2017/01/25 Javascript
Three.js入门之hello world以及如何绘制线
2017/09/25 Javascript
JavaScript实现精美个性导航栏筋斗云效果
2017/10/29 Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
2019/09/25 Javascript
python中常用检测字符串相关函数汇总
2015/04/15 Python
Python中生成器和yield语句的用法详解
2015/04/17 Python
浅析Python中的join()方法的使用
2015/05/19 Python
python使用json序列化datetime类型实例解析
2018/02/11 Python
对python mayavi三维绘图的实现详解
2019/01/08 Python
Python中的引用和拷贝实例解析
2019/11/14 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
2020/03/05 Python
TensorFlow2.1.0最新版本安装详细教程
2020/04/08 Python
Python多个装饰器的调用顺序实例解析
2020/05/22 Python
python中HTMLParser模块知识点总结
2021/01/25 Python
解决Python import .pyd 可能遇到路径的问题
2021/03/04 Python
移动web模拟客户端实现多方框输入密码效果【附代码】
2016/03/25 HTML / CSS
英国奢侈品网站:MatchesFashion
2016/12/16 全球购物
美国在线精品家居网站:Burke Decor
2017/04/12 全球购物
华为c/c++笔试题
2016/01/25 面试题
医学生实习自荐信
2013/10/01 职场文书
有个性的自我评价范文
2013/11/15 职场文书
女方回门宴答谢词
2014/01/14 职场文书
幼儿园新学期寄语
2014/01/18 职场文书
企业员工培训感言
2014/02/26 职场文书
2014年化验员工作总结
2014/11/18 职场文书
苹果发布了MagSafe固件更新,可以不外接电源实现最高7.5W充电
2022/04/21 数码科技