Javascript jQuery';css()实现

Javascript jQuery';css()实现,javascript,jquery,css,internet-explorer,Javascript,Jquery,Css,Internet Explorer,我在查看jQuery代码时发现了这一行: elem.runtimeStyle.left=elem.currentStyle.left 在 我不知道为什么会这样做。这不是没用吗 将runtimeStyle设置为currentStyle不会覆盖任何内容。除了让runtimeStyle在下次阅读时可读之外——现在似乎不需要了 我理解这里的整体概念以及代码块存在的原因(通过将左侧设置为非像素值并读取其像素值,然后将左侧恢复为原始值,将数字非像素值转换为适当的像素值) 编辑查看下面我的答案,了解我认为为

我在查看jQuery代码时发现了这一行:

elem.runtimeStyle.left=elem.currentStyle.left

我不知道为什么会这样做。这不是没用吗

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

我理解这里的整体概念以及代码块存在的原因(通过将左侧设置为非像素值并读取其像素值,然后将左侧恢复为原始值,将数字非像素值转换为适当的像素值)


编辑查看下面我的答案,了解我认为为什么会这样做(使用JSFIDLE插图!)。

这实际上是一个IE黑客攻击,上面的RHS计算的值被输入上面的LHS。我们正在得到新的值,以便得到计算出的值。查看此博客了解更多信息

我一直在思考这个问题。这就是为什么我相信这是成功的:

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

见此:


因此,这样做是为了计算像素值,而不改变UI

,这很可能是IE6支持的原因。这是为什么评论最合适的时候之一。我可能遗漏了一些东西,但我不明白你的意思“我们正在获得新的价值,以便计算出价值”。JSPIF基准似乎显示了黑客的速度较慢……AsiWar实际上重新分配了价值。如在考虑中。<代码> var a=10;var k=20;x(k);函数x(a){a= a;} < /Cord> >我猜它有点类似。