Как получить только числовую часть свойства CSS с помощью jQuery? - PullRequest
151 голосов
/ 09 июля 2009

Мне нужно сделать численный расчет на основе свойств CSS. Однако, когда я использую это, чтобы получить информацию:

$(this).css('marginBottom')

возвращает значение «10px». Есть ли хитрость в том, чтобы просто получить числовую часть значения, независимо от того, является ли оно px или % или em или чем-то еще?

Ответы [ 15 ]

274 голосов
/ 09 июля 2009
parseInt($(this).css('marginBottom'), 10);

parseInt автоматически игнорирует единицы измерения.

Например:

var marginBottom = "10px";
marginBottom = parseInt(marginBottom, 10);
alert(marginBottom); // alerts: 10
156 голосов
/ 09 июля 2009

Это приведет к очистке строки, не содержащей цифр, точек и не минус, от строки:

$(this).css('marginBottom').replace(/[^-\d\.]/g, '');

ОБНОВЛЕНО для отрицательных значений

116 голосов
/ 04 февраля 2011

При использовании метода замены значение css является строкой, а не числом.

Этот метод более чистый, простой и возвращает число:

parseFloat($(this).css('marginBottom'));
13 голосов
/ 09 июля 2009
parseFloat($(this).css('marginBottom'))

Даже если marginBottom определен в em, значение внутри parseFloat выше будет в px, так как это вычисляемое свойство CSS.

8 голосов
/ 09 июля 2009
$(this).css('marginBottom').replace('px','')
5 голосов
/ 26 июня 2015

Предположим, у вас установлено свойство margin-bottom 20px / 20% / 20em. Чтобы получить значение в виде числа, есть два варианта:

Вариант 1:

parseInt($('#some_DOM_element_ID').css('margin-bottom'), 10);

Функция parseInt () анализирует строку и возвращает целое число. Не изменяйте 10 в приведенной выше функции (известной как «основание»), если вы не знаете, что делаете.

Пример выходных данных будет равен: 20 (если поле margin-bottom установлено в px) для% и em будет выводить относительное число на основе текущего размера родительского элемента / шрифта.

Вариант 2 (лично я предпочитаю этот вариант)

parseFloat($('#some_DOM_element_ID').css('margin-bottom'));

Пример выходных данных будет равен: 20 (если поле margin-bottom установлено в px) для% и em будет выводить относительное число на основе текущего размера родительского элемента / шрифта.

Функция parseFloat () анализирует строку и возвращает число с плавающей запятой.

Функция parseFloat () определяет, является ли первый символ в указанной строке числом. Если это так, он анализирует строку до достижения конца числа и возвращает число как число, а не как строку.

Преимущество варианта 2 состоит в том, что если вы получите возвращенные десятичные числа (например, 20.32322px), вы получите возвращаемое число со значениями после десятичной точки. Полезно, если вам нужно вернуть конкретные числа, например, если нижнее поле установлено в em или %

5 голосов
/ 14 декабря 2009

Я использую простой плагин jQuery для возврата числового значения любого отдельного свойства CSS.

Применяется parseFloat к значению, возвращаемому методом jQuery по умолчанию css.

Определение плагина:

$.fn.cssNum = function(){
  return parseFloat($.fn.css.apply(this,arguments));
}

Использование:

var element = $('.selector-class');
var numericWidth = element.cssNum('width') * 10 + 'px';
element.css('width', numericWidth);
4 голосов
/ 10 марта 2013

Id для:

Math.abs(parseFloat($(this).css("property")));
4 голосов
/ 09 июля 2009

parseint усекает любые десятичные значения (например, 1.5em дает 1).

Попробуйте функцию replace с регулярным выражением например,

$this.css('marginBottom').replace(/([\d.]+)(px|pt|em|%)/,'$1');
3 голосов
/ 24 февраля 2015

Вы можете реализовать этот очень простой jQuery плагин:

Определение плагина:

(function($) {
   $.fn.cssValue = function(p) {
      var result;
      return isNaN(result = parseFloat(this.css(p))) ? 0 : result;
   };
})(jQuery);

Он устойчив к NaN значениям, которые могут встречаться в старой версии IE (вместо этого будет возвращено 0)

Использование:

$(this).cssValue('marginBottom');

Наслаждайтесь! :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...