Css üst değerini dize olarak değil sayı olarak alın?


123

JQuery'de üst konuma göre en üst konumu bir sayı olarak alabilirsiniz, ancak css üst değerini, içinde ayarlanmışsa bir sayı olarak alamazsınız px.
Aşağıdakilere sahip olduğumu varsayalım:

#elem{
  position:relative;
  top:10px;
 }
<div>
  Bla text bla this takes op vertical space....
  <div id='elem'>bla</div>
</div>
$('#elem').position().top; //Returns the number (10+(the vertical space took by the text))
$('#elem').css('top'); //Returns the string '10px'

Ama numara olarak css top özelliğine sahip olmak istiyorum 10.
Buna nasıl ulaşılır?

Yanıtlar:


213

Dizeyi bir sayıya dönüştürmek için parseInt () işlevini kullanabilirsiniz, örneğin:

parseInt($('#elem').css('top'));

Güncelleme: (Ben'in önerdiği gibi): Tabanı da vermelisiniz:

parseInt($('#elem').css('top'), 10);

Ondalık sayı olarak ayrıştırılmasına zorlar, aksi takdirde '0' ile başlayan dizeler sekizlik bir sayı olarak çözümlenebilir (kullanılan tarayıcıya bağlı olabilir).


57
Tabanı da vermelisiniz: parseInt ($ ('# elem'). Css ('top'), 10); Onu 10 tabanı olarak ayrıştırmaya zorlar, aksi takdirde '0' ile başlayan dizeler 8 tabanında ayrıştırılır.
Ben

3
Yine de bir kayan nokta olabilir, bu nedenle parseFloat kullanmak daha iyidir.
Vsevolod Golovanov

25

M4N'in cevabına dayalı bir jQuery eklentisi

jQuery.fn.cssNumber = function(prop){
    var v = parseInt(this.css(prop),10);
    return isNaN(v) ? 0 : v;
};

O zaman bu yöntemi sayı değerlerini elde etmek için kullanırsınız

$("#logo").cssNumber("top")

13

Ivan Castellanos'un cevabına dayanan biraz daha pratik / verimli bir eklenti (M4N'nin cevabına dayanıyordu). Kullanımı || 0, Nan'yi test adımı olmadan 0'a dönüştürecektir.

Ayrıca, amaçlanan kullanıma uygun float ve int varyasyonları da sağladım:

jQuery.fn.cssInt = function (prop) {
    return parseInt(this.css(prop), 10) || 0;
};

jQuery.fn.cssFloat = function (prop) {
    return parseFloat(this.css(prop)) || 0;
};

Kullanımı:

$('#elem').cssInt('top');    // e.g. returns 123 as an int
$('#elem').cssFloat('top');  // e.g. Returns 123.45 as a float

Http://jsfiddle.net/TrueBlueAussie/E5LTu/ adresinde keman test edin


Görünüşe göre ya her zaman cssFloat kullanmalı ya da cssInt'in 25.9999999px - 25 gibi bir değeri çıkaracağını düşünmelisiniz.
justingordon

1
@justingordon: Bu, bir int için doğru tamsayı kesme davranışıdır, dolayısıyla gerçekten değerin gerekli kullanımına bağlıdır.
Kodlamaya Gitti
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.