Largeur totale de l'élément (y compris le rembourrage et la bordure) dans jQuery
-
20-08-2019 - |
Question
Comme dans le sujet, comment obtenir la largeur totale d'un élément, y compris sa bordure et son remplissage, à l'aide de jQuery? J'ai le plugin jQuery Dimensions, et l'exécution de .width () sur mon DIV de remplissage de 760px, 10px, renvoie 760.
Peut-être que je fais quelque chose de mal, mais si mon élément se manifeste par une largeur de 780 pixels et que Firebug me dit qu'il contient un remplissage de 10 pixels, mais que l'appel de .width () ne donne que 760, je n'aurais pas la vie facile. comment.
Merci pour vos suggestions.
La solution
[Mise à jour]
La réponse originale était écrite avant jQuery 1.3 et les fonctions qui existaient à l'époque n'étaient pas suffisantes par elles-mêmes pour calculer toute la largeur.
Maintenant, en tant que JP indique correctement, jQuery a les fonctions outerWidth et outerHeight qui inclut par défaut border
et padding
, ainsi que le margin
si le premier argument de la fonction est true
[Réponse originale]
La méthode width
ne nécessite plus le plugin dimensions
, car elle a été ajoutée à la jQuery Core
Ce que vous devez faire est d’obtenir les valeurs de remplissage, de marge et de largeur de bordure de cette div particulière et de les ajouter au résultat de la <=> méthode
.Quelque chose comme ça:
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
Divisé en plusieurs lignes pour le rendre plus lisible
Ainsi, vous obtiendrez toujours la valeur calculée correcte, même si vous modifiez les valeurs de remplissage ou de marge à partir du fichier css
Autres conseils
Toute autre personne tombant sur cette réponse devrait noter que jQuery (> = 1.3) a maintenant outerHeight
/ outerWidth
des fonctions permettant de récupérer la largeur y compris le remplissage / les bordures, par exemple
$(elem).outerWidth(); // Returns the width + padding + borders
Pour inclure également la marge, transmettez simplement true
:
$(elem).outerWidth( true ); // Returns the width + padding + borders + margins
ressemble à outerWidth est cassé dans la dernière version de jQuery.
La différence se produit lorsque
la div externe est flottée, la div interne a la largeur définie (plus petite que la div externe) la div interne a style = " marge: auto "
Juste pour simplifier, j’ai résumé la bonne réponse d’Andreas Grech ci-dessus dans certaines fonctions. Pour ceux qui veulent un peu de bonheur copier-coller.
function getTotalWidthOfObject(object) {
if(object == null || object.length == 0) {
return 0;
}
var value = object.width();
value += parseInt(object.css("padding-left"), 10) + parseInt(object.css("padding-right"), 10); //Total Padding Width
value += parseInt(object.css("margin-left"), 10) + parseInt(object.css("margin-right"), 10); //Total Margin Width
value += parseInt(object.css("borderLeftWidth"), 10) + parseInt(object.css("borderRightWidth"), 10); //Total Border Width
return value;
}
function getTotalHeightOfObject(object) {
if(object == null || object.length == 0) {
return 0;
}
var value = object.height();
value += parseInt(object.css("padding-top"), 10) + parseInt(object.css("padding-bottom"), 10); //Total Padding Width
value += parseInt(object.css("margin-top"), 10) + parseInt(object.css("margin-bottom"), 10); //Total Margin Width
value += parseInt(object.css("borderTopWidth"), 10) + parseInt(object.css("borderBottomWidth"), 10); //Total Border Width
return value;
}
les mêmes navigateurs peuvent renvoyer une chaîne de caractères pour la largeur de la bordure. Dans cet article, parseInt renvoie NaN alors assurez-vous d’analyser correctement la valeur dans int.
var getInt = function (string) {
if (typeof string == "undefined" || string == "")
return 0;
var tempInt = parseInt(string);
if (!(tempInt <= 0 || tempInt > 0))
return 0;
return tempInt;
}
var liWidth = $(this).width();
liWidth += getInt($(this).css("padding-left"));
liWidth += getInt($(this).css("padding-right"));
liWidth += getInt($(this).css("border-left-width"));
liWidth += getInt($(this).css("border-right-width"));
$(document).ready(function(){
$("div.width").append($("div.width").width()+" px");
$("div.innerWidth").append($("div.innerWidth").innerWidth()+" px");
$("div.outerWidth").append($("div.outerWidth").outerWidth()+" px");
});
<div class="width">Width of this div container without including padding is: </div>
<div class="innerWidth">width of this div container including padding is: </div>
<div class="outerWidth">width of this div container including padding and margin is: </div>