Ottieni il valore massimo CSS come numero non come stringa?


123

In jQuery puoi ottenere la prima posizione relativa al genitore come numero, ma non puoi ottenere il valore superiore CSS come numero se era impostato in px.
Di 'che ho quanto segue:

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

Ma voglio avere la proprietà css top come numero 10.
Come si può raggiungere questo obiettivo?

Risposte:


213

È possibile utilizzare la funzione parseInt () per convertire la stringa in un numero, ad esempio:

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

Aggiornamento: (come suggerito da Ben): dovresti dare anche la radice:

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

Impone che venga analizzato come numero decimale, altrimenti le stringhe che iniziano con "0" potrebbero essere analizzate come un numero ottale (potrebbe dipendere dal browser utilizzato).


57
Dovresti dare anche la radice: parseInt ($ ('# elem'). Css ('top'), 10); Impone che venga analizzato come base 10, altrimenti le stringhe che iniziano con "0" verranno analizzate in base 8.
Ben

3
Potrebbe essere un float, quindi è meglio usare parseFloat.
Vsevolod Golovanov

25

Un plugin jQuery basato sulla risposta di M4N

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

Quindi usa questo metodo per ottenere valori numerici

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

13

Un plugin leggermente più pratico / efficiente basato sulla risposta di Ivan Castellanos (che era basata sulla risposta di M4N). L'utilizzo || 0convertirà Nan in 0 senza la fase di test.

Ho anche fornito variazioni float e int per soddisfare l'uso previsto:

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

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

Uso:

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

Prova il violino su http://jsfiddle.net/TrueBlueAussie/E5LTu/


Sembrerebbe che si debba usare sempre cssFloat o considerare che cssInt rimuoverà un valore come 25.9999999px a 25.
justingordon

1
@justingordon: questo è il comportamento corretto di troncamento di interi per un int, quindi dipende dall'uso richiesto del valore.
Gone Coding
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.