[Atualizar]
A resposta original foi escrita antes do jQuery 1.3 e as funções que existiam no momento não eram adequadas por si mesmas para calcular toda a largura.
Agora, como o JP afirma corretamente, o jQuery possui as funções outerWidth e outerHeight, que incluem o border
e padding
por padrão, e também o margin
if, o primeiro argumento da função étrue
[Resposta original]
O width
método não requer mais o dimensions
plug - in, porque ele foi adicionado aojQuery Core
O que você precisa fazer é obter os valores de preenchimento, margem e largura da borda dessa div específica e adicioná-los ao resultado do width
método
Algo assim:
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
Divida em várias linhas para torná-lo mais legível
Dessa forma, você sempre obterá o valor calculado correto, mesmo se alterar os valores de preenchimento ou margem do css
parseInt
s podem ser alterados para o+
operador para tornar o código mais sucinto. Assim,parseInt(theDiv.css("padding-left"), 10)
poderia ser transformado para+theDiv.css("padding-left")
etc ...Qualquer pessoa que tropeçar nessa resposta deve observar que o jQuery agora (> = 1.3) tem
outerHeight
/outerWidth
funções para recuperar a largura, incluindo preenchimento / bordas, por exemploPara incluir a margem também, basta passar
true
:fonte
parece que outerWidth está quebrado na versão mais recente do jquery.
A discrepância acontece quando
a div externa é flutuada, a div interna tem a largura definida (menor que a div externa) a div interna possui style = "margin: auto"
fonte
Por simplicidade, encapsulei a grande resposta de Andreas Grech acima em algumas funções. Para aqueles que querem um pouco de felicidade, recorte e cole.
fonte
os mesmos navegadores podem retornar string para a largura da borda; nesse parseInt retornará NaN, portanto, certifique-se de analisar o valor para int corretamente.
fonte
fonte