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 相关文章推荐
Javascript MD4
Dec 20 Javascript
符合W3C网页标准的iframe标签的使用方法
Jul 19 Javascript
jquery中使用ajax获取远程页面信息
Nov 13 Javascript
深入理解JavaScript系列(10) JavaScript核心(晋级高手必读篇)
Jan 15 Javascript
简介JavaScript中的unshift()方法的使用
Jun 09 Javascript
javascript实现粘贴qq截图功能(clipboardData)
May 29 Javascript
jquery判断页面网址是否有效的两种方法
Dec 11 Javascript
微信小程序实现给嵌套template模板传递数据的方式总结
Dec 18 Javascript
在vscode中统一vue编码风格的方法
Feb 22 Javascript
create-react-app 修改为多入口编译的方法
Aug 01 Javascript
浅谈小程序 setData学问多
Feb 20 Javascript
js实现div色块碰撞
Jan 16 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
德生PL990,目前市面上唯一一款便携式插卡蓝牙全波段高性能收音机
2021/03/02 无线电
用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
2011/05/07 PHP
UCenter 批量添加用户的php代码
2012/07/17 PHP
一个非常完美的读写ini格式的PHP配置类分享
2015/02/12 PHP
AES加解密在php接口请求过程中的应用示例
2016/10/26 PHP
如何通过PHP实现Des加密算法代码实例
2020/05/09 PHP
javascript检查日期格式的函数[比较全]
2008/10/17 Javascript
javascript检测页面是否缩放的小例子
2013/05/16 Javascript
jquery选择器原理介绍($()使用方法)
2014/03/25 Javascript
iframe的onreadystatechange事件在firefox下的使用
2014/04/16 Javascript
jQuery产品间断向下滚动效果核心代码
2014/05/08 Javascript
jquery实现图片按比例缩放示例
2014/07/01 Javascript
ajaxFileUpload.js插件支持多文件上传的方法
2014/09/02 Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
2015/07/27 Javascript
跟我学习javascript的闭包
2015/11/16 Javascript
nodejs基础应用
2017/02/03 NodeJs
微信小程序 共用变量值的实现
2017/07/12 Javascript
node.js通过Sequelize 连接MySQL的方法
2020/12/28 Javascript
[45:25]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
Python中运算符"=="和"is"的详解
2016/10/08 Python
利用Pandas 创建空的DataFrame方法
2018/04/08 Python
python3个性签名设计实现代码
2018/06/19 Python
Python OpenCV实现鼠标画框效果
2020/08/19 Python
Python制作词云图代码实例
2019/09/09 Python
Python shutil模块用法实例分析
2019/10/02 Python
Xadmin+rules实现多选行权限方式(级联效果)
2020/04/07 Python
python实现批处理文件
2020/07/28 Python
意大利中国电子产品购物网站:Geekmall.com
2019/09/30 全球购物
实习生自荐信范文分享
2013/11/27 职场文书
食品采购员岗位职责
2014/04/14 职场文书
债务纠纷委托书范本
2014/10/14 职场文书
关于运动会广播稿50字
2014/10/18 职场文书
受资助学生感谢信
2015/01/21 职场文书
幼儿园园务工作总结2015
2015/05/18 职场文书
实习单位意见
2015/06/04 职场文书
JavaScript数组reduce()方法的语法与实例解析
2021/07/07 Javascript