hunter3721 发表于 2013-2-7 22:57:45

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

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

最近我的同事 小卡 在整合jquery代码的时候,对JQuery里IE下取精确像素值的部分提出了一些疑问
 
下面的代码片段来自jquery-1.8.2.js:
 
 
currentStyle = function( elem, name ) {var left, rsLeft, uncomputed,ret = elem.currentStyle && elem.currentStyle[ name ],style = elem.style;// Avoid setting ret to empty string here// so we don't default to autoif ( ret == null && style && (uncomputed = style[ name ]) ) {ret = uncomputed;}// From the awesome hack by Dean Edwards// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291// If we're not dealing with a regular pixel number// but a number that has a weird ending, we need to convert it to pixelsif ( rnumnonpx.test( ret ) ) {// Remember the original values//①left = style.left;rsLeft = elem.runtimeStyle && elem.runtimeStyle.left;// Put in the new values to get a computed value out//②if ( rsLeft ) {elem.runtimeStyle.left = elem.currentStyle.left;}//③style.left = name === "fontSize" ? "1em" : ret;ret = style.pixelLeft + "px";// Revert the changed values//④style.left = left;if ( rsLeft ) {elem.runtimeStyle.left = rsLeft;}}return ret === "" ? "auto" : ret;};  
 
主要是代码段②这里
 

// Put in the new values to get a computed value outif ( rsLeft ) {elem.runtimeStyle.left = elem.currentStyle.left; //疑问!}   疑问:这一句到底是干啥用的?
 小卡试过 将这段去掉,在IE6/7/8/9里均不影响最终结果,即使runtimeStyle已经被人为设置过
 
解释?

我以前看JQ的时候也对DE的这段代码有过疑问,所以我按照那时候的理解给出的解释:
<div class="quote_div"><div style="font-weight: bold;">runtimeStyle是运行时样式,优先级最高
页: [1]
查看完整版本: JQuery中使用DE的绝对像素值hack的一处疑问