js 获取元素的具体样式信息getcss(实例讲解)


Posted in Javascript onJuly 05, 2017

如果想获取元素的某一个具体的样式属性值

1、元素.style.属性名

需要我们把元素的样式都写在行内样式上才可以(写在样式表中是不管用的)

console.log(box.style.height)  ->null

在真实项目中,这种方式不常用,因为不能为了获取值而把所有的样式都写在行内(无法实现html和css的分离)

2、使用window.getComputedStyle(当前操作的元素对象,当前元素的伪类【一般我们不用伪类写null】)这个方法获取所有经过浏览器计算过的样式

所有经过浏览器计算过的样式:只要当前的元素标签可以在页面中呈现出来,那么他的所有样式都是经过浏览器计算过的(渲染过的)->哪怕有些样式你没有写,我们也可以获取到

获取的结果是CSSStyleDeclaration这个类的实例:包含了当前元素的所有样式属性和值

console.log(window.getComputedStyle);//function

console.log(window.getComputedStyle(box,null))["height"]

3、方法虽然好用,但是在IE6-8下是不兼容的:因为window下没有getComputedStyle这个属性->会报错

在IE6-8下我们可以使用currentStyle来获取所有经过浏览器计算过的样式

console.log(box.currentStyle)

console.log(box.currentStyle.height)

获取样式的兼容写法getCss:获取当前元素所有经过浏览器计算过的样式中的[attr]对应的值

/*
      curEle:[object] 当前要操作的元素对象 
      attr:[string] 我们要获取的样式属性的名称
      1、使用try、catch来处理兼容(只有在不得已的情况下)
        前提:必须保证try中的代码在不兼容的时候报错,这样才可以catch捕获到错误信息,进行其他的处理
        不管当前的浏览器是否支持这个方法,都需要把try中的代码执行一遍,如果当前是IE7,window.getComputedStyle不兼容,但是也需要执行一遍再执行catch里面的代码,执行了两遍,消耗性能,
      2、判断当前浏览器中是否存在这个属性或者方法,存在就兼容,不存在就不兼容
      3、通过检测浏览器版本和类型来处理兼容 window.navigator.userAgent
      获取当前浏览器是IE6-8
      
    */
    function getCss(curEle,attr){
      var val = null;
      //方法2
      if("window.getComputedStyle" in window){//或者window.getComputedStyle
        var = window.getComputedStyle(curEle,null)[attr];
      }else{
        var = curEle.currentStyle[attr];
      }
      //方法1
      try{
        var = window.getComputedStyle(curEle,null)[attr];
      }catch(e){
        var = curEle.currentStyle[attr];
      }
      //方法3
      if(/MSIE (6|7|8)/.test(navigator.userAgent)){
        var = curEle.currentStyle[attr];
      }else{
        var = window.getComputedStyle(curEle,null)[attr];
      }
      return val;    
    }
console.log(getCss(box,"border"))
    console.log(getCss(box,"fontFamily"))

标准浏览器和IE浏览器获取的结果还是不一样的->对于部分样式属性,不同浏览器获取的结果不一样,主要是由于getComputedStyle和currentStyle在某些方面不一样

对于复合的样式值可以拆开来获取

console.log(getCss(box,"marginTop"))

上面的getCss还没有写完,下面进行第一次升级:把获取的样式值“单位去掉”(只有符合“数字+单位/数字”才可以使用parseFloat)

function getCss(curEle,attr){
      var val = null;
      var reg = null;
      if(/MSIE (6|7|8)/.test(navigator.userAgent)){
        var = curEle.currentStyle[attr];
      }else{
        var = window.getComputedStyle(curEle,null)[attr];
      }
      reg = /^(-?\d+(\.\d+)?)(px|pt|rem|em)?$/i;

      return reg.test(val)?parseFloat(val):val; //这样写肯定不行,对于某些样式属性的值是不能去单位的,例如:float position margin padding border  这些复合值 background  
    }

第二次升级:有些样式属性在不同的浏览器中是不兼容的,例如opacity

function getCss(curEle,attr){
      var val = null;
      var reg = null;
      if(/MSIE (6|7|8)/.test(navigator.userAgent)){
        if(attr==="opacity"){
          val = curEle.currentStyle["filter"];
          //把获取到的结果剖析,获取里面的数字,让数字除以100才和标准浏览器保持一致
          reg = /^alpha\(opacity=(\d+(?:\.\d+)?)\)$/i;
          val = reg.test(val)?reg.exec(val)[1]/100:1

        }else{
          val = curEle.currentStyle[attr];
        }        
      }else{
        //如果传递进来的结果是opacity,说明我想获得的是透明度,但是在IE6-8下获取透明度需要使用filter
        val = window.getComputedStyle(curEle,null)[attr];
      }
    }

在补充一个小的知识点:伪类

:before  :after  在一个元素便签的前面或者后面创建一个新的虚拟标签,我们可以给这个虚拟标签增加样式,也可以增加内容等...也可以通过伪类来进行清除浮动 可以通过如下方式获取 window.getComputedStyle(box,"before").content

以上这篇js 获取元素的具体样式信息getcss(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
游戏人文件夹程序 ver 3.0
Jul 14 Javascript
JavaScript Eval 函数使用
Mar 23 Javascript
Javascript基础教程之while语句
Jan 18 Javascript
JS控制弹出悬浮窗口(一览画面)的实例代码
May 30 Javascript
利用Vue.js指令实现全选功能
Sep 08 Javascript
JS异步文件分片断点上传的实现思路
Dec 25 Javascript
jQuery实现页面滚动时智能浮动定位
Jan 08 Javascript
AngularJS表格添加序号的方法
Mar 03 Javascript
关于angularJs清除浏览器缓存的方法
Nov 28 Javascript
使用puppeteer破解极验的滑动验证码
Feb 24 Javascript
详解vue项目接入微信JSSDK的坑
Dec 14 Javascript
wx-charts 微信小程序图表插件的具体使用
Aug 18 Javascript
Angular 2父子组件数据传递之@Input和@Output详解(下)
Jul 05 #Javascript
使用prop解决一个checkbox选中后再次选中失效的问题
Jul 05 #Javascript
JS鼠标滚动分页效果示例
Jul 05 #Javascript
jQuery实现返回顶部按钮和scroll滚动功能[带动画效果]
Jul 05 #jQuery
Angular 2父子组件数据传递之@Input和@Output详解 (上)
Jul 05 #Javascript
js实现图片旋转 js滚动鼠标中间对图片放大缩小
Jul 05 #Javascript
vue2.X组件学习心得(新手必看篇)
Jul 05 #Javascript
You might like
利用php+mysql来做一个功能强大的在线计算器
2010/10/12 PHP
php截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
2014/06/10 PHP
php cli配置文件问题分析
2015/10/15 PHP
PHP不使用内置函数实现字符串转整型的方法示例
2017/07/03 PHP
一个可以随意添加多个序列的tag函数
2009/07/21 Javascript
Javascript计算时间差的函数分享
2011/07/04 Javascript
JS实现标签页效果(配合css)
2013/04/03 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
jQuery实现contains方法不区分大小写的方法
2015/02/13 Javascript
Angular在一个页面中使用两个ng-app的方法
2017/02/20 Javascript
利用jquery正则表达式在页面验证url网址输入是否正确
2017/04/04 jQuery
nodejs异步编程基础之回调函数用法分析
2018/12/26 NodeJs
详解nodejs 开发企业微信第三方应用入门教程
2019/03/12 NodeJs
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
javascript History对象原理解析
2020/02/17 Javascript
JavaScript cookie原理及使用实例
2020/05/08 Javascript
python实现2014火车票查询代码分享
2014/01/10 Python
python中的内置函数getattr()介绍及示例
2014/07/20 Python
python3连接MySQL数据库实例详解
2018/05/24 Python
python opencv人脸检测提取及保存方法
2018/08/03 Python
如何使用python传入不确定个数参数
2020/02/18 Python
Python文字截图识别OCR工具实例解析
2020/03/05 Python
Python计算指定日期是今年的第几天(三种方法)
2020/03/26 Python
Python中and和or如何使用
2020/05/28 Python
利用Python发送邮件或发带附件的邮件
2020/11/12 Python
python 实现的IP 存活扫描脚本
2020/12/10 Python
如何通过python检查文件是否被占用
2020/12/18 Python
什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?
2016/08/13 面试题
大学生四个方面的自我评价
2013/09/19 职场文书
挂牌仪式主持词
2014/03/20 职场文书
文明城市创建标语
2014/06/16 职场文书
俞敏洪一分钟演讲稿
2014/08/26 职场文书
2014大学生学生会工作总结
2014/12/19 职场文书
岗位职责范本大全
2015/02/26 职场文书
JavaScript模拟实现网易云轮播效果
2022/04/04 Javascript
JS高级程序设计之class继承重点详解
2022/07/07 Javascript