首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

JQuery中施用DE的绝对像素值hack的一处疑问

2012-11-23 
JQuery中使用DE的绝对像素值hack的一处疑问本篇主要记录一下昨天和同事对JQ里取绝对像素值时对runTimeStyl

JQuery中使用DE的绝对像素值hack的一处疑问

本篇主要记录一下昨天和同事对JQ里取绝对像素值时对runTimeStyle的一处细节的讨论,同时提出自己的一些疑问。

?

疑问

最近我的同事 小卡?在整合jquery代码的时候,对JQuery里IE下取精确像素值的部分提出了一些疑问

?

下面的代码片段来自jquery-1.8.2.js:

?

?

?

?

?

主要是代码段②这里

?


?

?发现DE原始的代码里并无此判断

?

?然后又翻了一下1.4的JQ,发现里面也是没有这句判断。

?发现是1.5版本才增加的这个判断。

?

?那么到底JQ里为啥要增加这句判断呢?

?去Github看下history,发现2011年1月5号之前,源码里也是没有这个判断的

?直到rwldrn一个针对opera的bugfix: ??
JQuery中施用DE的绝对像素值hack的一处疑问
?
?可以看到,这里是为了规避opera抛出异常,所以加了一句判断。??看到这里,只有两种可能性了:? A. 我之前的理解是错误的,这里并非为了担心下面对style.left赋值导致UI改变才写了这句话,而是有其他我暂未想到的原因? B. 我之前的理解是正确的,rwldrn的这个fix虽然规避了异常,但无意间使得对runtimeStyle的设置和恢复的代码,在常规情况下都不会进入了?? 那个可能性更大?? rwldrn提交了一个有副作用的fix(尽管可以看到,这个副作用不大),而这个错误在接下来的2年里,在无数人review的JQuery项目里,都未被发现??? 所以我更倾向于我的理解是错误的。?到底咋解释??再看一遍runTimeStyle的资料: ?仍然没有思路 ??在网上找了一圈下来,发现大部分的理解和我基本相同?除了?franky 的这篇 ? ...

其中要提的是 element.runtimeStyle 为什么这里也把他临时覆盖了呢? 可能是出于 保险。比如 其他代码中可能更改了此值 因为 runtimeStyle的优先级 要高越style... 所以为了pixelLeft取出正确的值 所以 也覆盖了element.runtimeStyle.

...
? ?franky的这个猜测,倒是和我的理解不同,但他的博文较早了,当时也仍然是基于没有那句if的讨论,所以当时看来也说得通?但现在jq里加上那句if后,这个解释仍然无法规避同样的悖论??实在想不出什么靠谱的解释了。。。?只能先上来po一篇博文,留待以后研究后补充结论。?也欢迎大神们来这里讨论~~?相关资料汇总在这里(持续补充),供参考:?来源:
http://erik.eae.net/archives/2007/07/27/18.54.15/
两篇相关的中文blog:
http://yiminghe.iteye.com/blog/511589
http://www.cnblogs.com/_franky/archive/2009/11/29/1612969.html
runtimeStyle属性的介绍:
http://help.dottoro.com/ljhddfwr.php


?? 1 楼 司徒正美 昨天   这两个 if ( rsLeft ) {  直接去掉就行了
以前jQuery使用非A即B的方式,导致opera错误跑到currentStyle分支下
现在既然不会跑到这里,那就没用了 2 楼 hunter3721 15 小时前   I have already pulled a request here:
https://github.com/jquery/jquery/pull/1026

热点排行