jQuery .css()实现

时间:2012-07-06 18:37:12

标签: javascript jquery css internet-explorer

我正在查看jQuery代码并找到了这一行:

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

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

我不确定为什么这样做。这没用吗?

将runtimeStyle设置为currentStyle将不会覆盖任何内容。除了在下次阅读时使runtimeStyle可读 - 现在似乎不需要。

我理解这里的整体概念以及为什么存在代码块(将数字非像素值转换为适当的像素值,方法是将左边的值设置为非像素值并读取其像素值然后恢复左后角到原来的价值)。

编辑请参阅下面的回答,了解为什么我认为这样做(使用jsFiddle插图!)。

2 个答案:

答案 0 :(得分:1)

这实际上是IE hack,其中由上述RHS计算的值被馈入上述LHS。 ie.We正在获得新值,以便获得计算出的值。查看此博客,了解有关它的更多信息http://jsperf.com/testing-awesome-hack-for-ie

答案 1 :(得分:1)

我一直在想这个。这就是我相信它已经完成的原因:

将runtimeStyle设置为currentStyle可确保这是应用于元素的样式(运行时样式优于内联样式)。因此,当您在下一行中设置elem.style.left时,UI中不会有任何更改。但是,仍然可以使用elem.style.pixelLeft计算新的像素值 - 因为这只会将CSS上的非像素值转换为像素值。 pixelLeft不是实际位置的衡量标准,只是转换为像素值。

请参阅:http://jsfiddle.net/RaSzc/

所以这样做是为了找出像素值而不会在UI中做任何改变