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 火狐(firefox)不显示本地图片问题解决
Jul 05 Javascript
jquery判断小数点两位和自动删除小数两位后的数字
Mar 19 Javascript
JavaScript调用客户端Java程序的方法
Jul 27 Javascript
JavaScript实现的多种鼠标拖放效果
Nov 03 Javascript
js实现字符串和数组之间相互转换操作
Jan 12 Javascript
JS 拼凑字符串的简单实例
Sep 02 Javascript
JavaScript 中的 this 简单规则
Sep 19 Javascript
JavaScript对JSON数组简单排序操作示例
Jan 31 Javascript
使用vue-cli3新建一个项目并写好基本配置(推荐)
Apr 24 Javascript
node学习笔记之读写文件与开启第一个web服务器操作示例
May 29 Javascript
JS实现页面数据懒加载
Feb 13 Javascript
原生JS实现京东查看商品点击放大
Dec 21 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
第十三节--对象串行化
2006/11/16 PHP
利用PHP函数计算中英文字符串长度的方法
2014/11/11 PHP
使用jquery mobile做幻灯播放效果实现步骤
2013/01/04 Javascript
JavaScript避免内存泄露及内存管理技巧
2014/09/05 Javascript
AngularJS基础知识笔记之过滤器
2015/05/10 Javascript
javascript判断复选框是否选中的方法
2015/10/16 Javascript
JS组件中bootstrap multiselect两大组件较量
2016/01/26 Javascript
JS和Canvas实现图片的预览压缩和上传功能
2018/03/30 Javascript
vue基础之data存储数据及v-for循环用法示例
2019/03/08 Javascript
vue学习笔记之过滤器的基本使用方法实例分析
2020/02/01 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
python分析网页上所有超链接的方法
2015/05/08 Python
解析Python中的二进制位运算符
2015/05/13 Python
简单了解Python下用于监视文件系统的pyinotify包
2015/11/13 Python
Python时间的精准正则匹配方法分析
2017/08/17 Python
python版微信跳一跳游戏辅助
2018/01/11 Python
python画折线图的程序
2018/07/26 Python
浅析Python函数式编程
2018/10/06 Python
python+mysql实现学生信息查询系统
2019/02/21 Python
Django对models里的objects的使用详解
2019/08/17 Python
Python3 翻转二叉树的实现
2019/09/30 Python
Python守护进程实现过程详解
2020/02/10 Python
Python greenlet和gevent使用代码示例解析
2020/04/01 Python
python爬虫基础知识点整理
2020/06/02 Python
python实现图像外边界跟踪操作
2020/07/13 Python
哪种Python框架适合你?简单介绍几种主流Python框架
2020/08/04 Python
浅析Python 责任链设计模式
2020/09/11 Python
CSS3实现的炫酷菜单代码分享
2015/03/12 HTML / CSS
CSS+jQuery实现的在线答题功能
2015/04/25 HTML / CSS
荷兰网上鞋店:Ziengs.nl
2017/01/02 全球购物
澳大利亚最受欢迎的美发用品目的地:AMR
2019/08/28 全球购物
路由表示做什么用的?在linux环境中怎么来配置一条默认路由?
2013/06/07 面试题
2014年五四青年节活动方案
2014/03/29 职场文书
2014年双拥工作总结
2014/11/21 职场文书
增值税发票丢失证明
2015/06/19 职场文书
Java实现经典游戏泡泡堂的示例代码
2022/04/04 Java/Android