114 votes

jQuery Comment obtenir la marge et le retrait d'un élément ?

Je me demandais comment, en utilisant jQuery, je pouvais obtenir le formatage d'un élément (padding total, marge, etc.), c'est-à-dire 30px 30px 30px 30px 30px ou 30px 5px 15px 30px, etc.

J'ai essayé

var margT = jQuery('img').css('margin');
var bordT = jQuery('img').css('border');
var paddT = jQuery('img').css('padding');

Mais cela ne fonctionne pas ? http://jsfiddle.net/q7Mra/

0 votes

0 votes

Veuillez vous référer au lien ci-dessous qui est un peu similaire. stackoverflow.com/questions/590602/

202voto

Dan Short Points 7064
var bordT = $('img').outerWidth() - $('img').innerWidth();
var paddT = $('img').innerWidth() - $('img').width();
var margT = $('img').outerWidth(true) - $('img').outerWidth();

var formattedBord = bordT + 'px';
var formattedPadd = paddT + 'px';
var formattedMarg = margT + 'px';

Consultez les documents relatifs à l'API jQuery pour obtenir des informations sur chacun d'eux :

Voici l'édition jsFiddle montrant le résultat.

Vous pouvez effectuer le même type d'opérations pour la hauteur afin d'obtenir sa marge, sa bordure et son rembourrage.

1 votes

Si c'est le cas, vous pouvez prendre les valeurs calculées, ajouter "px" et vous obtenez les valeurs en pixels.

0 votes

Mise à jour de la réponse et de jsFiddle avec les résultats.

0 votes

Merci beaucoup, mais je cherche les valeurs imprimées pour pouvoir les réappliquer, c'est-à-dire 30px 30px 30px 30px ou 30px 5px 15px 30px, etc.

113voto

Elias Zamaria Points 13196

Selon le Documentation sur jQuery Les propriétés CSS abrégées ne sont pas prises en charge.

Selon ce que vous entendez par "rembourrage total", vous pouvez peut-être faire quelque chose comme ceci :

var $img = $('img');
var paddT = $img.css('padding-top') + ' ' + $img.css('padding-right') + ' ' + $img.css('padding-bottom') + ' ' + $img.css('padding-left');

27 votes

Ne le sortez pas comme ça. Et si on est auto ou 2% ou inherit ?

0 votes

@Dan - j'apprécie vraiment l'effort Dan. Je m'excuse de ne pas avoir clarifié davantage :( Désolé de vous faire perdre votre temps.

0 votes

Cela arrive :). Rédiger de bonnes questions est presque aussi difficile que de rédiger de bonnes réponses.

18voto

RavenHursT Points 118

jQuery.css() renvoie les tailles en pixels, même si le CSS lui-même les spécifie en em, ou en pourcentage, ou autre. Il ajoute les unités ('px'), mais vous pouvez néanmoins utiliser parseInt() pour les convertir en nombres entiers (ou parseFloat() pour les cas où les fractions de pixels ont un sens).

http://jsfiddle.net/BXnXJ/

    $(document).ready(function () {
    var $h1 = $('h1');
    console.log($h1);
    $h1.after($('<div>Padding-top: ' + parseInt($h1.css('padding-top')) + '</div>'));
    $h1.after($('<div>Margin-top: ' + parseInt($h1.css('margin-top')) + '</div>'));
});

3voto

simshaun Points 14463

Frontière

Je crois que vous pouvez obtenir la largeur de la bordure en utilisant .css('border-left-width') . Vous pouvez également récupérer le haut, la droite et le bas et les comparer pour trouver la valeur maximale. La clé ici est que vous devez spécifier un côté spécifique.

Rembourrage

Voir jQuery calcule le padding-top comme un nombre entier en px

Marge

Utilisez la même logique que pour border ou padding.

Alternativement, vous pouvez utiliser largeur extérieure . Le pseudo-code devrait être
margin = (outerWidth(true) - outerWidth(false)) / 2 . Notez que cela ne fonctionne que pour trouver la marge horizontalement. Pour trouver la marge verticalement, il faut utiliser outerHeight .

0 votes

Votre stratégie pour la marge ne fonctionne pas dans Firefox, elle retournera 0 à chaque fois si vous avez un padding horizontal "auto", par exemple pour centrer l'élément.

0voto

José P. Airosa Points 168

Si l'élément que vous analysez n'a pas de marge, de bordure ou autre définie, vous ne pourrez pas le renvoyer. Au mieux, vous pourrez obtenir 'auto', qui est normalement la valeur par défaut.

D'après votre exemple, je peux voir que vous avez margT comme variable. Je ne sais pas si vous essayez d'obtenir margin-top. Si c'est le cas, vous devriez utiliser .css('margin-top') .

Vous essayez également d'obtenir la stylisation à partir de 'img', ce qui se traduira (si vous en avez plusieurs) par un tableau.

Ce que vous devez faire, c'est utiliser le .each() méthode jquery.

Par exemple :

jQuery('img').each(function() {
    // get margin top
    var margT = jQuery(this).css('margin-top');

    // Do something with margT
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X