文字列ではなく数値としてCSSトップ値を取得しますか?


123

jQueryでは、親を基準にした上位の位置を数値として取得できますが、CSSの上位の値がで設定されてpxいる場合、数値として取得できません。
私が以下を持っているとしましょう:

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

しかし、数値としてcssのtopプロパティを使用したいと思い10ます。
どうすればこれを達成できますか?

回答:


213

parseInt()関数を使用して、文字列を数値に変換できます。例:

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

更新:(Benの提案どおり):基数も指定する必要があります。

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

強制的に10進数として解析します。それ以外の場合、「0」で始まる文字列は8進数として解析される可能性があります(使用するブラウザーによって異なる場合があります)。


57
基数も与える必要があります:parseInt($( '#elem')。css( 'top')、10); 強制的に、それはベース10として解析することが、それ以外の場合は「0」がベース8に解析される文字列で始まる
ベン

3
ただし、フロートの可能性があるため、parseFloatを使用することをお勧めします。
Vsevolod Golovanov 2013年

25

M4Nの答えに基づくjQueryプラグイン

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

したがって、このメソッドを使用して数値を取得します

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

13

Ivan Castellanosの回答(M4Nの回答に基づく)に基づいた、もう少し実用的で効率的なプラグイン。を使用|| 0すると、テスト手順なしでNanが0に変換されます。

使用目的に合わせて、floatとintのバリ​​エーションも用意しました。

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

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

使用法:

$('#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/でフィドルをテストします


1つはどちらか必ずcssFloatを使用するか、cssIntが25に25.9999999pxのような値を削除することを検討すべきであるように思わ
justingordon

1
@justingordon:これはintの正しい整数の切り捨て動作なので、実際に必要な値の使用法になります。
コーディング終了
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.