JQuery kullanarak tam sayı olarak piksel cinsinden dolgu veya kenar boşluğu değeri


207

jQuery, piksel cinsinden yükseklik veya genişliği tamsayı olarak döndüren height () en width () işlevlerine sahiptir ...

JQuery kullanarak bir öğenin doldurma veya kenar boşluğu değerini piksel cinsinden ve tamsayı olarak nasıl alabilirim ?

İlk fikrim aşağıdakileri yapmaktı:

var padding = parseInt(jQuery("myId").css("padding-top"));

Ancak, örneğin ems'de dolgulama verilirse, değeri piksel cinsinden nasıl alabilirim?


Chris Pebble tarafından önerilen JSizes eklentisine baktığımda kendi sürümümün doğru olduğunu anladım :). jQuery her zaman piksel cinsinden değer döndürür, bu yüzden onu tamsayıya çözümlemek çözümdü.

Chris Pebble ve Ian Robinson'a teşekkürler


Lütfen aşağıdaki cevaplar arasından bir cevap seçebilir misiniz?
Wes Modes

4
Bu dizideki kişilere bir not: kullanırken her zaman sayı tabanı belirtin parseInt. MDN'den Alıntı: " radix Yukarıda belirtilen dizenin yarıçapını (matematiksel sayı sistemlerinde taban) temsil eden 2 ile 36 arasında bir int. Ondalık sayı sistemi için 10 belirtin. Okuyucu karmaşasını ortadan kaldırmak ve öngörülebilir davranışı garanti etmek için her zaman bu parametreyi belirtin Bir uygulama belirtilmediğinde farklı uygulamalar, genellikle değeri 10 olarak varsayılan olarak farklı sonuçlar üretir. " Bakınız: developer.mozilla.org/tr-TR/docs/Web/JavaScript/Reference/…
dgellow

Yanıtlar:


226

CSS kullanabilmeniz gerekir ( http://docs.jquery.com/CSS/css#name ). "Sol dolgu" veya "kenar boşluğu" gibi daha spesifik olmanız gerekebilir.

Misal:

CSS

a, a:link, a:hover, a:visited, a:active {color:black;margin-top:10px;text-decoration: none;}

JS

$("a").css("margin-top");

Sonuç 10 pikseldir.

Tam sayı değerini almak istiyorsanız, aşağıdakileri yapabilirsiniz:

parseInt($("a").css("margin-top"))

5
JQuery yöntemi aslında "px" soneki döndürüp döndürmediğini kontrol etmedim, ancak JSizesdiğer cevap (ki ben kullanarak sona erdi) eklentisi dönüş değeri ParseInt(...), sadece FYI geçirildiğinde bir tamsayı döndürür .
Dan Herbert

12
FYI: jQuery 'px' ekler, bu nedenle Ian'ın çözümü çalışır ve parseInt () öğesine aktarıldığında bir tamsayı döndürür - ve bir eklenti gerektirmez:parseInt($('a').css('margin-top').replace('px', ''))
Peter Rust


17
Dolgu / kenar boşluğu CSS'de em veya pt olarak ifade edilirse, .css()yine de değeri "px" ile döndürür?
ingredient_15939

22
@ material_15939 - Sadece denedim ve evet; gerçek piksel değerini hesaplar ve px ile döndürür. Kenar genişlikleri için de aynı. Biliyorum eski soru, ama kimse sorunuzu cevaplamadığı için diğer geç
kalanlara

79

Toplam kenar boşluğu ve dolgu elde etmek için dış ve iç yükseklik / genişlikleri karşılaştırın:

var that = $("#myId");
alert(that.outerHeight(true) - that.innerHeight());

harika bir ipucu! Bana yardım etti
Abe Petrillo

1
outerHeight Var olduğunu fark etmedim. Çok teşekkür ederim!
AlexMorley-Finch

6
OuterWidth / Height'in sınır genişliklerini de içerdiğini unutmayın
electrichead

7
innertWidth / innerHeight ayrıca hesaplamalarında dolgu da içerir, dolgu olmadan genişlik / yükseklik elde etmek için .width () ve .height () kullanmanız gerekir. api.jquery.com/innerWidth api.jquery.com/width api.jquery.com/outerWidth
Andrew Ensley

2
that.outerHeight(true) - that.outerHeight()outerHeight (), dolguları ve sınırları içerecek, ancak kenar boşluklarını hariç tutacağı için toplam dikey kenar boşluklarını verecektir. Bkz. Api.jquery.com/outerWidth/ .
Aximili

35

ParseInt işlevi, dönüşümde kullanılan sayısal sistemi tanımlayan bir "radix" parametresine sahiptir, bu nedenle çağrı parseInt(jQuery('#something').css('margin-left'), 10);sol kenar boşluğunu bir Tamsayı olarak döndürür.

JSizes bunu kullanır.


3
Bunun için teşekkürler, küçük işlevsellik parçaları için eklentiler eklemekten nefret ediyorum.
Brian

2
Varsayılan olarak 10 olduğu için "sayı tabanı" geçmenize bile gerek yok.
Alexander Bird

5
ParseInt'in NaN döndürebileceğini unutmayın (bu da o değişkene dayalı hesaplamaları başarısız kılar) - daha sonra bir isNaN kontrolü ekleyin! Örnek vaka: parseInt('auto', 10);( autogeçerlidir margin-left).
Thomas

@sethAlexanderBird, sayı tabanı varsayılanı 10 olarak belirlendiğinde bunu doğrudur, ancak kod bağlantısı sizin için önemliyse (ve muhtemelen olması gerekir) jsLint ve jsHint, dışarıda bırakırsanız size göz atacaktır.
Greg

30

LÜTFEN yerel olarak mevcut olan bir şeyi yapmak için başka bir kütüphane yüklemeye gitmeyin!

jQuery's .css()% 's ve em'leri başlamak için piksel eşdeğerine dönüştürür ve döndürülen dizenin sonundan parseInt()kaldırır ve 'px'bir tamsayıya dönüştürür:

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

11

Çevresel boyutları nasıl elde edebileceğiniz aşağıda açıklanmıştır:

var elem = $('#myId');

var marginTopBottom  = elem.outerHeight(true) - elem.outerHeight();
var marginLeftRight  = elem.outerWidth(true)  - elem.outerWidth();

var borderTopBottom  = elem.outerHeight() - elem.innerHeight();
var borderLeftRight  = elem.outerWidth()  - elem.innerWidth();

var paddingTopBottom  = elem.innerHeight() - elem.height();
var paddingLeftRight  = elem.innerWidth()  - elem.width();

Her değişkenin, paddingTopBottomörneğin, öğenin her iki tarafındaki kenar boşluklarının toplamını içerdiğine dikkat edin ; yani paddingTopBottom == paddingTop + paddingBottom. Onları ayrı ayrı almanın bir yolu olup olmadığını merak ediyorum. Tabii ki, eşitse 2'ye bölebilirsiniz :)


true = kenar boşluğunu dahil et. +1000 İnternet
Glif

Bu da en iyi çözüm çünkü aynı zamanda çalışıyor IE 7. Bakınız: stackoverflow.com/questions/590602/…
Leniel Maccaferri

9

Bu basit işlev bunu yapacaktır:

$.fn.pixels = function(property) {
    return parseInt(this.css(property).slice(0,-2));
};

Kullanımı:

var padding = $('#myId').pixels('paddingTop');

3
dikkate almaz auto, inheritve %değerler
Thomas

3
@Thomas: Doğru değil. jsfiddle.net/nXyFN jQuery sonucu her zaman piksel cinsinden döndürür.
Mart'ta

4
@Mark jsfiddle.net/BNQ6S IE7:, NaNtarayıcıya bağlıdır. Bildiğim kadarıyla jQuery .css()aksine .width()& normalleşmez &.height()
Thomas

1
@Thomas: İlginç. Ian'ın çözümü (en yüksek puan alan) o zaman da aynı soruna sahip. svinto'nun çözümü muhtemelen en iyisidir.
Mart'ta 1

9

İnt ayrıştırma

parseInt(canvas.css("margin-left")); 

0 piksel için 0 döndürür


9

Bunları herhangi bir CSS özelliğinde olduğu gibi yakalayabilirsiniz :

alert($("#mybox").css("padding-right"));
alert($("#mybox").css("margin-bottom"));

Onları css yönteminde ikinci bir öznitelikle ayarlayabilirsiniz:

$("#mybox").css("padding-right", "20px");

EDIT: Yalnızca piksel değerine ihtiyacınız varsa, şunu kullanın parseInt(val, 10):

parseInt($("#mybox").css("padding-right", "20px"), 10);

3

Tamam sadece orijinal soruyu cevaplamak için:

doldurmayı aşağıdaki gibi kullanılabilir bir tamsayı olarak alabilirsiniz:

var padding = parseInt ($ ("myId"). css ("padding-top"). replace ("ems", ""));

Px gibi başka bir ölçüm tanımladıysanız, "ems" yerine "px" yazın. parseInt, dize parçasını yanlış bir değer olarak yorumlar, bu nedenle onu hiçbir şeyle değiştirmek önemlidir.


2

Ayrıca jquery çerçevesini kendiniz gibi bir şeyle genişletebilirsiniz:

jQuery.fn.margin = function() {
var marginTop = this.outerHeight(true) - this.outerHeight();
var marginLeft = this.outerWidth(true) - this.outerWidth();

return {
    top: marginTop,
    left: marginLeft
}};

Böylece jquery nesnelerinize, ofset işlevi gibi bir koleksiyon döndüren margin () adlı bir işlev eklenir.

fx.

$("#myObject").margin().top

2
Ne yazık ki bu size en üst ve sol kenar boşluklarını değil, tam olarak dikey ve toplam yatay kenar boşluklarını veriyor
Code Commander

Bununla birlikte, daha kesintisiz görünen bir kenar boşluğu işlevine izin vermek için diğer çözümlerden birinde parseInt işlevi kullanılarak düzenlenebilir
Brian

1

String.replace ("px", "")) kullanmayın;

ParseInt veya parseFloat kullanın!




0

Necro değil ama ben çeşitli değerlere dayalı pikselleri belirleyebilir bunu yaptı:

$.fn.extend({
  pixels: function (property, base) {
    var value = $(this).css(property);
    var original = value;
    var outer = property.indexOf('left') != -1 || property.indexOf('right') != -1 
      ? $(this).parent().outerWidth()
      : $(this).parent().outerHeight();

    // EM Conversion Factor
    base = base || 16;

    if (value == 'auto' || value == 'inherit') 
        return outer || 0;

    value = value.replace('rem', '');
    value = value.replace('em', '');

    if (value !== original) {
       value = parseFloat(value);
       return value ? base * value : 0;
    }

    value = value.replace('pt', '');

    if (value !== original) {
       value = parseFloat(value);
       return value ? value * 1.333333 : 0; // 1pt = 1.333px
    }

    value = value.replace('%', '');

    if (value !== original) {
      value = parseFloat(value);
      return value ? (outer * value / 100) : 0;
    }

    value = value.replace('px', '');
    return parseFloat(value) || 0;
  }
});

Bu şekilde, boyutlandırma ve otomatik / devralma için dikkate alırız.


parseInt()Yanlış olduğunu unutmayın , genişlik veya yükseklik kayan noktalar olabilir.
Alexis Wilke
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.