一、style、currentStyle、getComputedStyle的区别

  • style只能获取元素的内联样式,内部样式和外部样式使用style是获取不到的。

  • currentStyle可以弥补style的不足,但是只适用于IE。

  • getComputedStyle同currentStyle作用相同,但是适用于FF、opera、safari、chrome。

"DOM2级样式" 增强了document.defaultView,提供了getComputedStyle()方法。

这个方法接受两个参数:要取得计算样式的元素和一个伪元素字符串(例如“:after”)。如果不需要伪元素信息,第二个参数可以是null。

getComputerStyle()方法返回一个CSSStyleDeclaration(CSS样式声明,如:font-size:12px)对象,其中包含当前元素的所有计算的样式。

以下面的HTML页面为例:

<!DOCTYPE html>
<html>
<head>
<title>计算元素样式</title>
<meta charset="utf-8">
<style>
#myDiv { background-color:blue; width:300px; height:200px; }
</style>
<body>
<div id ="myDiv" style="background-color:red; border:1px solid black"></div>
<script>
var myDiv = document.getElementById("myDiv");
var computedStyle = document.defaultView.getComputedStyle(myDiv, null);
console.log(computedStyle.backgroundColor); //"red" 或 rgb(255, 0, 0)
console.log(computedStyle.width); //"100px"
console.log(computedStyle.height); //"200px"
console.log(computedStyle.border); //"1px solid rgb(0, 0, 0)" 或 空字符串
</script>
</body>
</head>
</html>

边框属性可能也不会返回样式表中实际的border规则(Opera会返回,但其它浏览器不会)。

存在这个差别的原因是不同浏览器解释综合属性的方式不同,因为设置这种属性实际上会涉及很多其他的属性。

在设置border时,实际上是设置了四个边的边框宽度、颜色、样式属性。

因此,即使 computedStyle.border不会在所有浏览器中都返回值,但computedStyle.borderLeftWidth则会返回值。

二、封装getStyle (获取样式currentStyle getComputedStyle兼容处理)

2.1基础版:

<script type="text/javascript">
function getStyle(obj, attr){
if(obj.currentStyle){
return obj.currentStyle[attr];
}
else{
return getComputedStyle(obj, null)[attr];
}
}
window.onload = function (){
var oDiv = document.getElementById('div1');
alert(getStyle(oDiv, 'backgroundColor'));
}
</script>
<div id="div1"></div>

2.2简洁版:

function getStyle(obj, attr) {
return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj, false)[attr];
}

文章参考:http://www.candoudou.com/archives/526

     http://www.cnblogs.com/leejersey/archive/2012/08/16/2642604.html

JavaScript获取HTML元素样式的方法(style、currentStyle、getComputedStyle)的更多相关文章

  1. javascript 获取iframe元素的方法

    javascript  获取iframe元素的方法 第一种: $("#IframeID").contents().find("div"); 第二种: $(win ...

  2. JavaScript获取html元素的实际宽度和高度

    一.JavaScript获取html元素宽高 1.宽高都写在样式表里,就比如#div1{width:120px;}.这中情况通过#div1.style.width拿不到宽度,而通过#div1.offs ...

  3. 用javaScript获取页面元素值

    用JavaScript获取页面元素常见的三种方法:                                                           getElementById() ...

  4. Javascript 获取链接(url)参数的方法

    有时我们需要在客户端获取链接参数,一个常见的方法是将链接当做字符串,按照链接的格式分解,然后获取对应的参数值.本文给出的就是这个流程的具体实现方法. 当然,我们也可以用正则直接匹配,文章中也给出了一个 ...

  5. javascript 获取元素样式的方法

    javascript 获取元素样式常用方法. Javascript获取CSS属性值方法:getComputedStyle和currentStyle  1 .对于元素的内联CSS样式(<div s ...

  6. javascript中获取非行间样式的方法

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

  7. Javascript获取html元素的几种方法

    1.通过id获取html元素 <!DOCTYPE html> <html> <head lang="en"> <meta charset= ...

  8. 元素高度、宽度获取 style currentStyle getComputedStyle getBoundingClientRect

    1.示例代码 (1)html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  9. 用Javascript获取页面元素的位置

    制作网页的过程中,你有时候需要知道某个元素在网页上的确切位置. 下面的教程总结了Javascript在网页定位方面的相关知识. 一.网页的大小和浏览器窗口的大小 首先,要明确两个基本概念. 一张网页的 ...

随机推荐

  1. 深度学习(deep learning)优化调参细节(trick)

    https://blog.csdn.net/h4565445654/article/details/70477979

  2. vTaskDelete(NULL)使用注意事项

    在实际开发过程中,记录犯过的一个错误,如下 vTaskDelete(NULL); iccid_return_num = ; 错误原因分析,在任务删除之后(调用vTaskDelete(NULL)之后), ...

  3. Django笔记 —— 模板高级进阶

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  4. 『AngularJS』创建 Service

    创建服务 Angular提供了几种有用的服务,对于所有的应用来说,你将会发现这些服务对于创建你自己的服务是有用处的.为了创建自己的服务,你应该从通过一个模块(module)注册一个服务工厂方法开始(可 ...

  5. EFT4 生成实体类

    创建T4模本拷贝以下代码 <#@ template language="C#" debug="false" hostspecific="true ...

  6. Android系统自带样式

    android:theme="@android:style/Theme.Dialog" 将一个Activity显示为能话框模式  android:theme="@andr ...

  7. 「暑期训练」「Brute Force」 Money Transfers (CFR353D2C)

    题目 分析 这个Rnd353真是神仙题层出不穷啊,大力脑筋急转弯- - 不过问题也在我思维江化上.思考任何一种算法都得有一个“锚点”,就是说最笨的方法怎么办.为什么要这么思考,因为这样思考最符合我们的 ...

  8. Python 3基础教程17-提问频率较高的几个Python问题

    这里,介绍几个初学者经常上网查询的问题,直接看下面的例子 # 常见的一些常识问题汇总 #!/user/bin/python # 这个是linux下python文件的写法,告诉程序,这个文件是pytho ...

  9. python之time和os模块

    1.time.time()获得的是一个时间戳,距离1970年以来多少秒 2.time.strftime(),按固定格式设置时间 import time print(time.localtime())# ...

  10. 本周学习总结JAVA

    6. 为如下代码加上异常处理 byte[] content = null; FileInputStream fis = new FileInputStream("testfis.txt&qu ...