博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript中获取非行间样式的方法
阅读量:5274 次
发布时间:2019-06-14

本文共 1500 字,大约阅读时间需要 5 分钟。

我们都知道一般在javascript中获取样式一般用的是nodeObj.style.attr这个属性的,但是这个属性只能获取行间样式非行间样式比如写在样式表中的样式那么用nodeObj.style.attr获取就是一个空字符。

今天我们来介绍下要获取节点计算后的样式就是不一定写在行间样式的方法。

1:window.getComputedStyle(obj,false)['attr']方法

这是BOM(浏览器window对象)提供的方法 ,所以可以直接写成getComputedStyle(nodeObj,false),省略前面的window对象,该方法有两个参数,第一个是要获取样式的节点对象;第二个可以写成任何的字符一般写成false或者null,这里最好是用false因为用null IE9+会有问题;后面直接跟要获取的样式(写在方括号中)即可。这个方法的返回值为一个对象,为计算后的样式的属性值对的集合。比如要获取某个div宽度。那么可以直接写成 var style=getComputedStyle(div,false)['width']; alert(style);

但是IE8 以下是不支持window.getComputedStyle(obj,false)['attr']方法

2:nodeObj.currentStyle['attr'];

node.currentStyle,该属性返回的也是是一个对象,也是计算后的样式的属性值对的集合。比如要获取某个div宽度。那么可以直接写成 

var style=div.currentStyle['width']; alert(style);

3:为了兼容性我们可以将其封装为一个函数,提供一个统一的获取计算后的样式方法如下:

html:

<body>

<div style="width:500px"></div>
</body>

css:

  <style type="text/css"> 

     body,*{margin: 0;padding: 0;}
     div{width: 300px;height: 300px;background: blue;border: 10px  solid #000;}
     </style>

js:

<script type="text/javascript">

window.οnlοad=function(){
      var div=document.getElementsByTagName("div")[0];
      var style=getAttr(div,'width')
      alert(style);   
}
function getAttr(obj,attr){  //我们把它们封装为一个函数,注意了在全局下定义的函数的都会默认设置为window对象的方法,所以以后我们调用方法的时候就可以直接用然后省略前面的对象,当然了你这样var style=window.getAttr(div,'width');调用也是木有问题的。
  var style;
     if(obj.currentStyle){   //当有这个属性的时候currentStyle
style=obj.currentStyle[attr]; //兼容IE 我测试的是ie5+
     }
     else{
style=getComputedStyle(obj,false)[attr]; //主流浏览器
     }
     return style;
}
</script>

效果

转载于:https://www.cnblogs.com/xiaominwu/p/4348063.html

你可能感兴趣的文章
多线程,多进程,协程
查看>>
Hacker News与Reddit的算法比较
查看>>
Learning Python 009 dict(字典)和 set
查看>>
JavaScript中随着鼠标拖拽而移动的块
查看>>
mysql-5.7.21-winx64.zip 下载安装
查看>>
Creating a Custom Login Page for SharePoint 2010
查看>>
jQuery基础修炼圣典—DOM篇(二)jQuery遍历
查看>>
Grunt 常用插件
查看>>
HDU 1021 一道水题
查看>>
php实现倒计时效果
查看>>
如何开发一个npm包并发布
查看>>
进击的 JavaScript(六) 之 this
查看>>
二进制&八进制&十六进制之间的快速转换------ 心算&笔算方法总结
查看>>
The operation couldn’t be completed. (LaunchServicesError error 0.)
查看>>
iOS开发tips总结
查看>>
php每天一题:strlen()与mb_strlen()的作用分别是什么
查看>>
学习MySQL我们应该知道哪些东西?
查看>>
Java VisualVM插件地址
查看>>
[QPlugins]学习大纲
查看>>
hdu 3335
查看>>