it-swarm.it

jQuery Come ottenere il margine e l'imbottitura di Element?

Mi chiedo solo - come usando jQuery - posso ottenere un padding di elementi formattati e un margine ecc.? cioè 30px 30px 30px 30px o 30px 5px 15px 30px ecc

Provai

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

Ma questo non funziona? http://jsfiddle.net/q7Mra/

96
Tom

Secondo documentazione jQuery , le proprietà CSS abbreviate non sono supportate.

A seconda di cosa intendi per "imbottitura totale", potresti essere in grado di fare qualcosa del genere:

var $img = $('img');
var paddT = $img.css('padding-top') + ' ' + $img.css('padding-right') + ' ' + $img.css('padding-bottom') + ' ' + $img.css('padding-left');
96
Elias Zamaria
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';

Controlla i documenti dell'API jQuery per informazioni su ciascuno:

Ecco la modifica jsFiddle che mostra il risultato.

È possibile eseguire lo stesso tipo di operazioni per l'altezza per ottenere il margine, il bordo e il riempimento.

187
Dan Short

jQuery.css() restituisce dimensioni in pixel, anche se il CSS stesso le specifica in em, o come percentuale o altro. Aggiunge le unità ('px'), ma è comunque possibile utilizzare parseInt() per convertirle in numeri interi (o parseFloat(), per cui le frazioni di pixel hanno senso).

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>'));
});
16
RavenHursT

Questo funziona per me:

var tP = $("img").css("padding").split(" ");
var Padding = {
    Top: tP[0] != null ? parseInt(tP[0]) : 0,
    Right: tP[1] != null ? parseInt(tP[1]) : (tP[0] != null ? parseInt(tP[0]) : 0),
    Bottom: tP[2] != null ? parseInt(tP[2]) : (tP[0] != null ? parseInt(tP[0]) : 0),
    Left: tP[3] != null ? parseInt(tP[3]) : (tP[1] != null ? parseInt(tP[1]) : (tP[0] != null ? parseInt(tP[0]) : 0))
};

Esempio di risultato:

Object {Top: 5, Right: 8, Bottom: 5, Left: 8}

Per un totale:

var TotalPadding = Padding.Top + Padding.Right + Padding.Bottom + Padding.Left;
3
Brutus

Ho uno snippet che mostra come ottenere le spaziature degli elementi con jQuery:

/* messing vertical spaces of block level elements with jQuery in pixels */

console.clear();

var jObj = $('selector');

for(var i = 0, l = jObj.length; i < l; i++) {
  //jObj.eq(i).css('display', 'block');
  console.log('jQuery object:', jObj.eq(i));
  console.log('plain element:', jObj[i]);

  console.log('without spacings                - jObj.eq(i).height():         ', jObj.eq(i).height());
  console.log('with padding                    - jObj[i].clientHeight:        ', jObj[i].clientHeight);
  console.log('with padding and border         - jObj.eq(i).outerHeight():    ', jObj.eq(i).outerHeight());
  console.log('with padding, border and margin - jObj.eq(i).outerHeight(true):', jObj.eq(i).outerHeight(true));
  console.log('total vertical spacing:                                        ', jObj.eq(i).outerHeight(true) - jObj.eq(i).height());
}
2
Andreas

Confine

Credo che puoi ottenere la larghezza del bordo usando .css('border-left-width'). Puoi anche recuperare in alto, a destra e in basso e confrontarli per trovare il valore massimo. La chiave qui è che devi specificare un lato specifico.

Imbottitura

Vedi jQuery calcola il padding-top come intero in px

Margin

Usa la stessa logica di border o padding.

In alternativa, è possibile utilizzare outerWidth. Lo pseudo-codice dovrebbe essere
margin = (outerWidth(true) - outerWidth(false)) / 2. Si noti che questo funziona solo per trovare il margine in orizzontale. Per trovare il margine in verticale, è necessario utilizzare outerHeight.

2
simshaun

Se l'elemento che stai analizzando non ha alcun margine, bordo o altro definito, non sarai in grado di restituirlo. In cima sarai in grado di ottenere 'auto' che è normalmente l'impostazione predefinita.

Dal tuo esempio vedo che hai margT come variabile. Non sono sicuro se stai cercando di ottenere il margine superiore. In tal caso, dovresti utilizzare .css('margin-top').

Stai anche cercando di ottenere la stilizzazione da 'img' che risulterà (se ne hai più di una) in un array.

Quello che dovresti fare è usare il metodo .each() jquery.

Per esempio:

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

    // Do something with margT
});
0
José P. Airosa