Получить верхнее значение 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'));

Обновление: (как было предложено Беном): вы также должны указать систему счисления:

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

Принудительно анализирует его как десятичное число, в противном случае строки, начинающиеся с «0», могут быть проанализированы как восьмеричное число (может зависеть от используемого браузера).

M4N
источник
57
Вы также должны указать систему счисления: parseInt ($ ('# elem'). Css ('top'), 10); Принудительно анализирует его как базу 10, в противном случае строки, начинающиеся с '0', будут анализироваться в базе 8.
Бен
3
Хотя это может быть и float, поэтому лучше использовать 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, поэтому на самом деле все сводится к необходимому использованию значения.
Gone Coding