Szukałem wokół i nie mogłem tego znaleźć. Próbuję uzyskać szerokość elementu div, ale jeśli ma przecinek dziesiętny, zaokrągla liczbę.
Przykład:
#container{
background: blue;
width: 543.5px;
height: 20px;
margin: 0;
padding: 0;
}
Jeśli to zrobię $('#container').width();
, zwróci 543 zamiast 543,5. Jak sprawić, żeby nie zaokrąglił liczby i zwrócił pełne 543,5 (lub jakąkolwiek inną liczbę).
javascript
jquery
css
MoDFoX
źródło
źródło
Odpowiedzi:
Użyj natywnego
Element.getBoundingClientRect
zamiast stylu elementu. Został wprowadzony w IE4 i jest obsługiwany przez wszystkie przeglądarki:Uwaga: W przypadku IE8 i starszych, zobacz uwagi „Zgodność z przeglądarkami” w dokumentacji MDN.
Pokaż fragment kodu
źródło
width
iheight
nie są obsługiwane we wszystkich wersjach IE, więc w niektórych przypadkach należy je obliczyć, zanim będą mogły zostać użyte: stackoverflow.com/questions/11907514/…getBoundingClientRect()
oblicza wymiary po zastosowaniu transformacji CSS .display: none
).Odpowiedź Rossa Allena jest dobrym punktem wyjścia, ale użycie getBoundingClientRect (). Width będzie również obejmować dopełnienie i szerokość obramowania, co nie jest w przypadku funkcji width jquery :
Jeśli Twoim zamiarem jest uzyskanie
width
wartości z precyzją, musisz usunąć wypełnienie i obramowanie w następujący sposób:źródło
.replace("px", "")
jakparseInt
powinien usunąć to za Ciebie.parseFloat()
może?innerWidth()
będąc częścią pierwotnego problemu, obawiam się, że obliczanie szerokości obramowania działa tutaj również na wartościach zaokrąglonych.Chciałem tylko dodać tutaj moje doświadczenie, chociaż pytanie jest stare: powyższy konsensus wydaje się być taki, że zaokrąglanie jQuery jest tak samo dobre jak niezaokrąglone obliczenia - ale nie wydaje się, aby tak było w przypadku czegoś, co robiłem .
Mój element ma ogólnie płynną szerokość, ale zawartość zmienia się dynamicznie za pośrednictwem AJAX. Przed przełączeniem zawartości tymczasowo blokuję wymiary elementu, aby mój układ nie podskakiwał podczas przejścia. Odkryłem, że używając jQuery w następujący sposób:
powoduje to trochę zabawne, na przykład różnice między rzeczywistą szerokością a obliczoną szerokością są subpikselowe. (Konkretnie, zobaczę, jak słowo przeskakuje z jednego wiersza tekstu do drugiego, wskazując, że szerokość została zmieniona, a nie tylko zablokowana.) Z innego pytania - Pobieranie rzeczywistej, zmiennoprzecinkowej szerokości elementu - znalazłem to
window.getComputedStyle(element).width
zwróci niezaokrąglone obliczenia. Więc zmieniłem powyższy kod na coś takiegoA z TYM kodem - bez zabawnego odbijania! To doświadczenie wydaje się sugerować, że niezaokrąglona wartość ma znaczenie dla przeglądarki, prawda? (W moim przypadku Chrome w wersji 26.0.1410.65.)
źródło
Możesz użyć
getComputedStyle
do tego:źródło
Użyj poniższych, aby uzyskać dokładną szerokość:
źródło
style.width