He buscado alrededor y no pude encontrar esto. Estoy tratando de obtener el ancho de un div, pero si tiene un punto decimal, redondea el número.
Ejemplo:
#container{
background: blue;
width: 543.5px;
height: 20px;
margin: 0;
padding: 0;
}
Si lo hago $('#container').width();
, devolverá 543 en lugar de 543,5. ¿Cómo consigo que no redondee el número y devuelva el 543,5 completo (o el número que sea)?
javascript
jquery
css
MoDFoX
fuente
fuente
Respuestas:
Utilice el estilo nativo en
Element.getBoundingClientRect
lugar del estilo del elemento. Se introdujo en IE4 y es compatible con todos los navegadores:Nota: Para IE8 y versiones anteriores, consulte las notas de "Compatibilidad del navegador" en los documentos de MDN.
Mostrar fragmento de código
fuente
width
yheight
no son compatibles con todas las versiones de IE, por lo que en algunos casos es necesario calcularlas antes de podergetBoundingClientRect()
calcula las dimensiones después de aplicar transformaciones CSS .display: none
).Solo quería agregar mi experiencia aquí, aunque la pregunta es vieja: el consenso anterior parece ser que el redondeo de jQuery es efectivamente tan bueno como un cálculo no redondeado, pero ese no parece ser el caso en algo que he estado haciendo .
Mi elemento tiene un ancho fluido, en general, pero un contenido que cambia dinámicamente a través de AJAX. Antes de cambiar el contenido, bloqueo temporalmente las dimensiones del elemento para que mi diseño no rebote durante la transición. Descubrí que usar jQuery así:
está causando algo de gracia, como si hubiera diferencias de subpíxeles entre el ancho real y el ancho calculado. (Específicamente, veré una palabra saltar de una línea de texto a otra, lo que indica que se ha cambiado el ancho, no solo bloqueado). De otra pregunta: obteniendo el ancho real de punto flotante de un elemento , encontré out que
window.getComputedStyle(element).width
devolverá un cálculo sin redondear. Así que cambié el código anterior a algo comoY con ESE código, ¡ no hay rebotes divertidos! Esa experiencia parece sugerir que el valor no redondeado realmente es importante para el navegador, ¿verdad? (En mi caso, Chrome versión 26.0.1410.65.)
fuente
La respuesta de Ross Allen es un buen punto de partida, pero el uso de getBoundingClientRect (). Width también incluirá el relleno y el ancho del borde, que no es el caso de la función de ancho de jquery :
Si su intención es obtener el
width
valor con precisión, tendrá que eliminar el relleno y el borde de esta manera:fuente
.replace("px", "")
asparseInt
debería eliminarlo por usted.parseFloat()
quizás?innerWidth()
ser parte del problema original, me temo que el cálculo del ancho del borde aquí también funciona con valores redondeados.Puede utilizar
getComputedStyle
para ello:fuente
Utilice lo siguiente para obtener un ancho preciso:
fuente
style.width