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?

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).


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")

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/


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.