jQuery为什么受欢迎,其中缘由之一就是方法名称比较短。比如打架同样,块头大的潜意识认为厉害,就不禁得心生畏惧,远而避之;小个子(或村妇,小孩)嘛,天然觉得是软豆腐,愿意接受做为对手。 php
所以,当看到相似getComputedStyle这么长的方法名的时候,咱们身体里那个懒惰小人忽然就醒了:哎哟哟,这东西,就跟放心食品同样,几年才见一回。看上去又蛮复杂,想到晚上还要跟妹子聊天。这东西,就让它从旁边过吧,反正不会掉块肉的。
网上不是有这么个段子嘛:可怕的是,比你聪明的人比你更勤奋。那么,这里的“勤奋”的差别体如今什么地方呢?就拿这个getComputedStyle举例:懒惰青年是看一下,立马像看见凤姐同样视线离开;普通青年是看一下,发现本身不了解,百一下或谷一下,熟悉了解之;勤奋青年是不只了解,还抽出时间实践之(如作个简单demo测试),熟悉方法的特异性,验证一些观点正确性。
您能够按照你如今的心理状态看看你是哪类青年:若是此时,您已经对本文的内容没有兴趣了(固然,您的工做与JS关系亲密),您是……(你懂的);若是您看完本文内容,发现,仍是有很多收获,心中回味下,而后ctrl+w去其余地方觅食,再也不回来,那您是普通青年;若是您看完本文,而后对所说的一些内容做了额外的测试,例如IE9浏览器是否支持测试等,并经过评论形式指出可能的错误,不得不说您是勤奋青年,假以时日,必有一番技术做为。从我文章的些评论来看,有很多同行就是这样的勤奋人儿。
の, 很久没写文章,话又多了,打住,进入正题。 css
getComputedStyle() gives the final used values of all the CSS properties of an element.
语法以下: html
var style = window.getComputedStyle("元素", "伪类");例如:
var dom = document.getElementById("test"), style = window.getComputedStyle(dom , ":after");就两个参数,你们都懂中文的,没什么好说的。只是额外提示下:Gecko 2.0 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1) 以前,第二个参数“伪类”是必需的(若是不是伪类,设置为null),不过如今嘛,不是必需参数了。
咱们使用element.style也能够获取元素的CSS样式声明对象,可是其与getComputedStyle方法还有有一些差别的。
jquery
若是咱们查看jQuery源代码,会发现,其css()方法实现不是使用的window.getComputedStyle而是document.defaultView.getComputedStyle,唷?这是怎么一回事?
git
实际上,使用defaultView基本上是没有必要的,getComputedStyle自己就存在window对象之中。根据DennisHall的说法,使用defaultView可能一是人们不太乐意在window上专门写个东西,二是让API在Java中也可用(这我不懂,忘指点~~)。
不过有个特殊状况,在FireFox3.6上不使用defaultView方法就搞不定的,就是访问框架(frame)的样式.
github
Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari | |
---|---|---|---|---|---|
基本支持 | ![]() |
![]() |
9 | ![]() |
![]() |
伪类元素支持 | ![]() |
![]() |
![]() |
![]() |
![]() |
对于手机设备: 浏览器
Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | |
---|---|---|---|---|---|
基本支持 | ![]() |
![]() |
WP7 Mango | ![]() |
![]() |
伪元素支持 | ? | ? | ![]() |
? | ? |
alert((element.currentStyle? element.currentStyle : window.getComputedStyle(element, null)).height);您能够狠狠地点击这里:使用getComputedStyle和currentStyle 获取元素高度demo
结果FireFox下显示24px(通过计算了), 而IE浏览器下则是CSS中的2em属性值: 框架
仔细对比查看,咱们能够看到很多差别,例如浮动属性,FireFox浏览器下是这个(cssFloat): dom
IE7浏览器下则是styleFloat : 学习
而IE9浏览器下则是cssFloat和styleFloat都有。
等其余N多差别。
window.getComputedStyle(element, null).getPropertyValue("float");若是咱们不使用getPropertyValue方法,直接使用键值访问,其实也是能够的。可是,好比这里的的float,若是使用键值访问,则不能直接使用getComputedStyle(element, null).float,而应该是cssFloat与styleFloat,天然须要浏览器判断了,比较折腾!
Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari | |
---|---|---|---|---|---|
基本支持 | ![]() |
![]() |
9 | ![]() |
![]() |
style.getAttribute("float");注意到没,使用getAttribute方法也不须要cssFloat与styleFloat的怪异写法与兼容性处理。不过,仍是有一点差别的,就是属性名须要驼峰写法,以下:
style.getAttribute("backgroundColor");若是不考虑IE6浏览器,貌似也是能够这么写:
style.getAttribute("background-color");实例才是王道,您能够狠狠地点击这里: getPropertyValue和getAttribute获取背景色demo
对于IE9浏览器,虽然应用的是currentStyle, 可是从结果上来说,currentStyle返回的对象是彻底支持getPropertyValue方法的。