2012-07-06 19 views
9

que estaba buscando a través del código de jQuery y encontré esta línea:.css de jQuery() aplicación

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

en

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

No estoy seguro de por qué se hace esto. ¿No es esto inútil?

Al establecer el estilo de tiempo de ejecución en el estilo actual, no se anularía nada. Excepto que haga que el runtimeStyle sea legible la próxima vez que lo lea, lo que no parece ser necesario ahora.

Entiendo el concepto general aquí y por qué existe ese bloque de código (para convertir valores numéricos que no sean píxeles al valor de píxel apropiado, configurando el valor que no sea píxel y leyendo su valor de píxel y luego invirtiendo el izquierdo de vuelta al valor original).

Editar Consulte mi respuesta a continuación para saber por qué creo que esto está hecho (¡con la ilustración jsFiddle!).

+5

Es más probable allí para la ayuda IE6. – laymanje

+2

Este es uno de los momentos en los que un comentario * why * hubiera sido apropiado. –

Respuesta

1

He estado pensando en esto. He aquí por qué creo que está hecho:

Al establecer el estilo de tiempo de ejecución en el estilo actual, se garantiza que este es el estilo que se aplica al elemento (el estilo de ejecución gana sobre el estilo en línea). Entonces, cuando configure elem.style.left en la siguiente línea, no habrá cambios en la IU. Sin embargo, el nuevo valor de píxel aún puede calcularse usando elem.style.pixelLeft, porque esto simplemente convierte el valor que no es de píxel en el CSS en un valor de píxel. pixelLeft no es una medida de la posición real, es solo una conversión al valor de píxel.

ver esto: http://jsfiddle.net/RaSzc/

Así que esto se hace para averiguar el valor de píxel sin tener nada cambio en la interfaz de usuario

1

Esto es realmente un truco de IE donde el valor calculado por el RHS de lo anterior se alimenta en el LHS de los anteriores. es decir, estamos obteniendo un nuevo valor para obtener el valor calculado. Echa un vistazo a este blog para saber más al respecto http://jsperf.com/testing-awesome-hack-for-ie

+0

Me puede estar faltando algo aquí, pero no entiendo lo que quiere decir con "Estamos obteniendo un nuevo valor para obtener el valor calculado". ¿Por qué se hace este truco? Los puntos de referencia jsperf parecen mostrar que el truco es más lento ... – Aishwar

+0

@Aishwar Es en realidad la reasignación del valor. Como en considerar. 'var a = 10; var k = 20; x (k); función x (a) { a = a; } ' Supongo que es algo así –