CSS-Spitzenwert als Zahl erhalten, nicht als Zeichenfolge?

123

In jQuery können Sie die oberste Position relativ zum übergeordneten Element als Zahl abrufen, aber Sie können den obersten CSS-Wert nicht als Zahl abrufen, wenn er festgelegt wurde px.
Angenommen, ich habe Folgendes:

#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'

Aber ich möchte die CSS-Top-Eigenschaft als Nummer haben 10.
Wie würde man das erreichen?

Pim Jäger
quelle

Antworten:

213

Mit der Funktion parseInt () können Sie die Zeichenfolge in eine Zahl konvertieren, z.

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

Update: (wie von Ben vorgeschlagen): Du solltest auch den Radix geben:

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

Erzwingt das Parsen als Dezimalzahl, andernfalls werden Zeichenfolgen, die mit '0' beginnen, möglicherweise als Oktalzahl analysiert (abhängig vom verwendeten Browser).

M4N
quelle
57
Sie sollten auch den Radix angeben: parseInt ($ ('# elem'). Css ('top'), 10); Erzwingt das Parsen als Basis 10, andernfalls werden Zeichenfolgen, die mit '0' beginnen, in Basis 8 analysiert.
Ben
3
Es könnte jedoch ein Float sein, daher ist es besser, parseFloat zu verwenden.
Vsevolod Golovanov
25

Ein jQuery-Plugin basierend auf der Antwort von M4N

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

Dann verwenden Sie einfach diese Methode, um Zahlenwerte zu erhalten

$("#logo").cssNumber("top")
Ivan Castellanos
quelle
13

Ein etwas praktischeres / effizienteres Plugin basierend auf der Antwort von Ivan Castellanos (basierend auf der Antwort von M4N). Mit || 0wird Nan ohne Testschritt in 0 konvertiert.

Ich habe auch Float- und Int-Variationen bereitgestellt, um sie dem Verwendungszweck anzupassen:

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

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

Verwendung:

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

Testen Sie die Geige auf http://jsfiddle.net/TrueBlueAussie/E5LTu/

Codierung weg
quelle
Es scheint, dass man entweder immer das cssFloat verwenden sollte oder bedenken sollte, dass cssInt einen Wert wie 25.9999999px bis 25
streift
1
@justingordon: Das ist das richtige Verhalten beim Abschneiden von Ganzzahlen für ein int, es kommt also wirklich auf die erforderliche Verwendung des Werts an.
Gone Coding