Denzz
.test {
border: 1px solid;
cursor: pointer;
height: 10px;
position: relative;
width: 100%;
}
<div id="test1" class="test"></div>
He mostrado mi HTML id
y su CSS. Ahora cuando estoy haciendo $('#test').width()
estoy obteniendo 100
. quiero su width
en píxeles (no en %
).
¿Alguien puede decir cómo obtener su ancho en píxeles?
Una de las opciones también puede ser que ese elemento principal no esté visible. Aquí hay un ejemplo: http://jsfiddle.net/nDMM3/
Puede ver que el ancho de retorno de jQuery = 100 (como 100%)
.test {
border: 1px solid;
cursor: pointer;
height: 10px;
position: relative;
width: 100%;
display:none;
}
#test2{
width:100%;
}
<div id="test1" class="test">
<div id="test2">
Hello
</div>
</div>
alert($('#test2').width());
-
No creo que a nadie se le ocurriera una forma inteligente de arreglar esto, ¿verdad?
– mituw16
9 de julio de 2014 a las 17:41
-
@ mituw16 +1 Para una solución a esto además de usar un
setTimeout
y volver a intentarlo un poco más tarde.– Muhammad Rehan Said
16 de diciembre de 2016 a las 13:26
ayyp
.width()
obtiene “… el ancho calculado actual” del elemento en el que se usa, según la documentación de ancho de jQuery: http://api.jquery.com/ancho/por lo que el valor de retorno de $('#heatMapBar').width()
está en píxeles, no en porcentaje. Sugeriría usar la herramienta de desarrolladores para verificar el ancho, puede ser que en #heatMapBar
El contexto actual de , su ancho es 100px.
Si miras aquí: http://jsfiddle.net/NkQXa/1/ verás que #test
se establece en width:50%;
pero alerta sobre el ancho de píxel real.
-
Pero puedo ver que su ancho está cerca de 700 px en realidad
– Denzz
25 de junio de 2013 a las 19:25
-
¡Verdadero! Se debe al tiempo. Revisé el mismo ancho después de unos segundos y luego me muestra el ancho adecuado. Entonces puede ser que el momento en que estaba llamando no fuera adecuado. Gracias.
– Denzz
25/06/2013 a las 19:31
-
Esto no funcionará con diseños receptivos. Devuelve el porcentaje.
– tibc-dev
04/02/2014 a las 22:56
-
.width()
me esta dando39.4
… pero debería ser alrededor de 400 …. …. luego verifiqué.css('width')
que volvió"39.4%"
… … … … … vea la respuesta de @honzik a continuación para explicar por qué– dsdsdsdsd
12 de junio de 2014 a las 21:18
-
@Denzz @tibc-dev @dsdsdsdsd @DJDaveMark Esperando DOM listo
$(function() { ... })
no funciona pero usando unsetTimeout
esperar un poco y volver a intentarlo. ¿Alguno de ustedes encontró una solución mejor?– Muhammad Rehan Said
16 de diciembre de 2016 a las 13:25
Puede haber un problema con múltiples divs que tienen un ancho porcentual:
<div style="width: 50%">
<div id="getMyWidth" style="width: 100%"></div>
</div>
En este caso, me devuelve 100 como ancho para el div interno. Lo resolví tomando el ancho del div exterior.
-
esto sucede mucho en los diseños de cuadrícula de Bootstrap, ya que en realidad no está configurando un ancho, está configurando un
class="span12"
o lo que sea. Estoy de acuerdo, lo más fácil es simplemente obtener el ancho del div principal más externo.– usuario101289
5 de enero de 2015 a las 21:57
Otra solución sin jquery es usar la propiedad clientWidth
disponible en HTMLElements
document.getElementById('test1').clientWidth
Residencia en de Honzik responda allí, esta es una pequeña solución en caso de que el elemento necesario para especificar su ancho esté dentro de un elemento principal oculto.
function getWidth(elemID) {
// get parent element unique id (must have)
var parentId = $("#"+elemID).parent().prop("id");
// remove the child element based on the specified element id
$("#"+elemID).remove();
// append a new child element but on body where most probably is not set to "display:none"
$("body").append('<div id="'+elemID+'">Hello</div>');
// get the width of the newly appended child element and store it to a variable
var width = $("#test2").width();
// remove child element from body
$("#"+elemID).remove();
// re-append child element to its former position under former parent element (having CSS attribute "display:none")
$(parentId).append('<div id="'+elemID+'">Hello</div>');
// display stored element width
alert(width);
}
// usage to get the element's width
getWidth("test2");
¡Pruébalo en el siguiente fragmento!
function getWidth(elemID) {
var parentId = $("#"+elemID).parent().prop("id"); // your parent element should have a unique id specified
$("#"+elemID).remove();
$("body").append('<div id="'+elemID+'">Hello</div>');
var width = $("#test2").width();
$("#"+elemID).remove();
$(parentId).append('<div id="'+elemID+'">Hello</div>');
alert(width);
}
getWidth("test2");
.test {
border: 1px solid;
cursor: pointer;
height: 10px;
position: relative;
width: 100%;
display:none;
}
#test2{
width:100%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="test1" class="test">
<div id="test2">
Hello
</div>
</div>
Dhruv Ramdev
Eso puede ser una coincidencia. Según la documentación oficial de api.jqery.com se afirma que
Obtenga el ancho calculado actual para el primer elemento en el conjunto de elementos coincidentes.
Para confirmar que está obteniendo el ancho en píxeles, puede equiparar este valor con el método .css(width) de jQuery. Devuelve el ancho en píxeles y, por lo tanto, puede confirmar que la altura de retorno está en píxeles.
mateo brent
Solo una idea… no odien. Sé que no cubre todas las eventualidades, pero algo como este podría verificar cada uno de los elementos padres para las reglas css deseadas (pantalla: ninguno; en este caso). Saqué la idea de aquí.
El único problema es cuando un sitio se vuelve más complicado… se vuelve lento.
Pero es un punto de partida.
//showing as 100%
alert($('#test2').width());
//use window.load to ensure .width() isnt doing anything funny
$(window).load(function(){
//checks to see if any of its parents have display:none; we can have multiple checks here if required
if ($( "#test2" ).parents().css('display') == 'none') {
//iterate through each parent of the selected item
$( "#test2" ).parents().each(function () {
//only change the display value if the element has a display:none;
if ($(this).css('display') == 'none') {
$(this).css('display', 'block');
alert($('#test2').width());//or whatever we want to do with this number
//reset values here
$(this).css('display', 'none');
}
});
}
//showing as 100%
alert($('#test2').width());
});
Problema de GitHub relacionado github.com/jquery/jquery/issues/3455
– Muhammad Rehan Said
16 de diciembre de 2016 a las 13:38
@kukkuz Sí, usé el violín en una de las respuestas a continuación. en mi caso no tengo
display:none
establecido pero tiene una página complicada. Estoy tratando de recrear un violín simple pero no puedo hacerlo hasta ahora.– Muhammad Rehan Said
16 de diciembre de 2016 a las 15:14
@MuhammadRehanSaeed, ¿qué resultado tienes cuando llamas?
element.getBoundingClientRect().width
o incluso simplementeelement.clientWidth
?– Kaiido
21 de diciembre de 2016 a las 13:51
respuesta editada para que contenga suficientes detalles. Creo que resuelve su problema fácilmente incluso con un padre oculto o cualquier tipo de antepasado.
– usuario2560539
21 de diciembre de 2016 a las 18:38
@MuhammadRehanSaeed element.clientWidth devolvió 0 (si recuerdo, lo ejecuté en el ejemplo de Hoznik, en el código de la pregunta devolvió 100)
– usuario2560539
21 de diciembre de 2016 a las 18:39