[Aktualizacja]
Oryginalna odpowiedź została napisana przed jQuery 1.3, a funkcje, które istniały w tym czasie, nie były same w sobie wystarczające do obliczenia całej szerokości.
Teraz, jak słusznie stwierdza JP , jQuery ma funkcje externalWidth i externalHeight, które domyślnie zawierają border
i padding
, a także margin
jeśli pierwszym argumentem funkcji jesttrue
[Oryginalna odpowiedź]
Ta width
metoda nie wymaga już dimensions
wtyczki, ponieważ została dodana dojQuery Core
To, co musisz zrobić, to pobrać wartości dopełnienia, marginesu i szerokości obramowania tego konkretnego elementu div i dodać je do wyniku width
metody
Coś takiego:
var theDiv = $("#theDiv");
var totalWidth = theDiv.width();
totalWidth += parseInt(theDiv.css("padding-left"), 10) + parseInt(theDiv.css("padding-right"), 10); //Total Padding Width
totalWidth += parseInt(theDiv.css("margin-left"), 10) + parseInt(theDiv.css("margin-right"), 10); //Total Margin Width
totalWidth += parseInt(theDiv.css("borderLeftWidth"), 10) + parseInt(theDiv.css("borderRightWidth"), 10); //Total Border Width
Podziel na wiele wierszy, aby były bardziej czytelne
W ten sposób zawsze otrzymasz poprawną obliczoną wartość, nawet jeśli zmienisz wartości dopełnienia lub marginesów z css
parseInt
s może być zmieniony na+
operatora, aby kod bardziej zwięzłe. WięcparseInt(theDiv.css("padding-left"), 10)
może być odwrócony do+theDiv.css("padding-left")
itd ...Każdy, kto natknie się na tę odpowiedź, powinien zauważyć, że jQuery teraz (> = 1.3) ma
outerHeight
/outerWidth
funkcje do pobierania szerokości, w tym dopełnienia / obramowań, np.Aby uwzględnić również margines, po prostu przekaż
true
:źródło
wygląda na to, że zewnętrzna szerokość jest zepsuta w najnowszej wersji jquery.
Rozbieżność występuje, gdy
element div zewnętrzny jest zmienny, element div wewnętrzny ma ustawioną szerokość (mniejszy niż element div zewnętrzny), a element div wewnętrzny ma style = "margin: auto"
źródło
Dla ułatwienia zawarłem świetną odpowiedź Andreasa Grecha powyżej w niektórych funkcjach. Dla tych, którzy chcą trochę szczęścia typu „wytnij i wklej”.
źródło
te same przeglądarki mogą zwracać ciąg znaków dla szerokości obramowania, w tym parseInt zwróci NaN, więc upewnij się, że przeanalizowałeś poprawnie wartość int.
źródło
źródło