2012-07-06 48 views
9

我一直在尋找通過jQuery的代碼,發現這一行:jQuery的的.css()實現

elem.runtimeStyle.left = elem.currentStyle.left;

https://github.com/jquery/jquery/blob/449e099b97d823ed0252d8821880bc0e471701ea/src/css.js#L169

我不知道爲什麼這樣做。這不是沒用嗎?

將runtimeStyle設置爲currentStyle將不會覆蓋任何內容。除了在下次閱讀時使runtimeStyle可讀 - 這似乎現在不需要了。

我理解這裏的總體概念以及爲什麼存在代碼塊(將數字非像素值轉換爲適當的像素值,方法是將左側設置爲非像素值並讀取其像素值,然後還原左側回到原始值)。

編輯查看我的答案,爲什麼我認爲這是完成(與jsFiddle插圖!)。

+5

這是最有可能在那裏IE6的支持任何變化。 – laymanje 2012-07-06 18:39:57

+2

這是一個* why *評論適合的時代之一。 – 2012-07-06 18:55:48

回答

1

我一直在想這個。這就是爲什麼我相信它已完成:

將runtimeStyle設置爲currentStyle可確保這是應用於元素的樣式(運行時樣式勝過內聯樣式)。因此,當您在下一行中設置elem.style.left時,用戶界面不會發生變化。但是,新的像素值仍然可以使用elem.style.pixelLeft來計算 - 因爲這只是將CSS上的非像素值轉換爲像素值。 pixelLeft不是實際位置的度量,它只是對像素值的轉換。

看到這個:http://jsfiddle.net/RaSzc/

所以這樣做是爲了找出像素值,而無需在UI

1

這實際上是一個IE hack,其中由上面的RHS計算出的值被納入到上述的LHS中。即我們正在獲得新的價值,以便將計算出來的值。看看這個博客瞭解更多關於它http://jsperf.com/testing-awesome-hack-for-ie

+0

我可能會在這裏錯過一些東西,但我不明白你的意思是「我們正在獲得新的價值,以便計算出來的價值」。爲什麼這個黑客已經完成了? jsperf基準似乎顯示黑客更慢... – Aishwar 2012-07-09 02:30:40

+0

@Aishwar它實際上重新分配的價值。正如考慮。 'var a = 10; var k = 20; x(k); (a) { a = a; a = a; }' 我猜它有點這件事 – 2012-07-09 06:33:56