Отримати найвище значення 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 як число 10.
Як би цього досягти?

Відповіді:


213

Ви можете використовувати функцію parseInt () для перетворення рядка в число, наприклад:

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

Оновлення: (як запропонував Бен): Вам також слід надати радіус:

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

Примушує його розбирати як десяткове число, інакше рядки, що починаються з '0', можуть бути проаналізовані як восьмеричне число (може залежати від використовуваного браузера).


57
Ви також повинні надати радіус: parseInt ($ ('# elem'). Css ('top'), 10); Примушує його проаналізувати як базу 10, інакше рядки, що починаються з "0", будуть проаналізовані в базі 8.
Бен

3
Це може бути поплавком, тому краще використовувати parseFloat.
Всеволод Голованов

25

Плагін jQuery на основі відповіді M4N

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

Тоді ви просто використовуєте цей метод, щоб отримати числові значення

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

13

Трохи більш практичний / ефективний плагін на основі відповіді Івана Кастельяноса (який базувався на відповіді 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/


Здавалося б, завжди слід використовувати cssFloat або вважати, що cssInt зніме значення, як 25,9999999px, до 25.
justingordon

1
@justingordon: Це правильна ціла поведінка усікання для int, тому воно дійсно зводиться до необхідного використання значення.
Пройшов кодування
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.