J'ai cherché et je n'ai pas trouvé ça. J'essaie d'obtenir la largeur d'un div, mais s'il a un point décimal, il arrondit le nombre.
Exemple:
#container{
background: blue;
width: 543.5px;
height: 20px;
margin: 0;
padding: 0;
}
Si je le fais, $('#container').width();
il retournera 543 au lieu de 543,5. Comment faire pour ne pas arrondir le nombre et renvoyer le 543,5 complet (ou quel que soit le nombre).
javascript
jquery
css
MoDFoX
la source
la source
Réponses:
Utilisez le natif
Element.getBoundingClientRect
plutôt que le style de l'élément. Il a été introduit dans IE4 et est pris en charge par tous les navigateurs:Remarque: pour IE8 et les versions antérieures, reportez-vous aux notes «Compatibilité du navigateur» dans la documentation MDN.
Afficher l'extrait de code
la source
width
etheight
ne sont pas prises en charge dans toutes les versions d'IE, donc dans certains cas, elles doivent être calculées avant de pouvoir être utilisées: stackoverflow.com/questions/11907514/…getBoundingClientRect()
calcule les dimensions après l'application des transformations CSS .display: none
).La réponse de Ross Allen est un bon point de départ, mais utiliser getBoundingClientRect (). Width inclura également le remplissage et la largeur de la bordure, ce qui n'est pas le cas de la fonction width de jquery :
Si votre intention est d'obtenir la
width
valeur avec la précision, vous devrez supprimer le remplissage et la bordure comme ceci:la source
.replace("px", "")
commeparseInt
devez supprimer pour vous.parseFloat()
peut-être?innerWidth()
faisant partie du problème d'origine, je crains que le calcul de la largeur de la bordure ici ne fonctionne également sur des valeurs arrondies.Je voulais juste ajouter mon expérience ici, bien que la question soit ancienne: le consensus ci-dessus semble être que l'arrondi de jQuery est en fait aussi bon qu'un calcul non arrondi - mais cela ne semble pas être le cas dans quelque chose que j'ai fait .
Mon élément a une largeur fluide, généralement, mais un contenu qui change dynamiquement via AJAX. Avant de changer de contenu, je verrouille temporairement les dimensions de l'élément afin que ma mise en page ne rebondisse pas pendant la transition. J'ai trouvé que l'utilisation de jQuery comme ceci:
provoque une certaine drôle, comme il y a des différences de sous-pixels entre la largeur réelle et la largeur calculée. (Plus précisément, je vais voir un mot sauter d'une ligne de texte à une autre, indiquant que la largeur a été modifiée, pas seulement verrouillée.) D'une autre question - Obtenir la largeur réelle en virgule flottante d'un élément - j'ai trouvé qui
window.getComputedStyle(element).width
renverra un calcul non arrondi. J'ai donc changé le code ci-dessus en quelque chose commeEt avec CE code - pas de rebond drôle! Cette expérience semble indiquer que la valeur unrounded effectivement fait affaire au navigateur, non? (Dans mon cas, Chrome Version 26.0.1410.65.)
la source
Vous pouvez utiliser
getComputedStyle
pour cela:la source
Utilisez ce qui suit pour obtenir une largeur précise:
la source
style.width