如何获得jQuery的CSS属性的数字部分?
我需要做一个基于CSS属性的数值计算。 但是,当我用这个来获取信息:
$(this).css('marginBottom')
它返回值“10px”。 是否有一个技巧,只是获得价值的数字部分,无论是px
或%
或em
或其他?
这将清除string中的所有非数字,非点和非减号:
$(this).css('marginBottom').replace(/[^-\d\.]/g, '');
更新为负值
parseInt($(this).css('marginBottom'), 10);
parseInt
会自动忽略单位。
例如:
var marginBottom = "10px"; marginBottom = parseInt(marginBottom, 10); alert(marginBottom); // alerts: 10
使用replace方法,您的CSS值是一个string,而不是一个数字。
这个方法更干净简单,并返回一个数字:
parseFloat($(this).css('marginBottom'));
parseFloat($(this).css('marginBottom'))
即使在em中定义了marginBottom,上面的parseFloat中的值也将在px中,因为它是一个计算的CSS属性。
$(this).css('marginBottom').replace('px','')
我使用一个简单的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);
身份证去:
Math.abs(parseFloat($(this).css("property")));
假设您将margin-bottom属性设置为20px / 20%/ 20em。 要获得数值作为数字有两个选项:
选项1:
parseInt($('#some_DOM_element_ID').css('margin-bottom'), 10);
parseInt()函数parsing一个string并返回一个整数。 除非你知道你在做什么,否则不要改变上述函数中的10(称为“基数”)。
示例输出将为:20(如果margin-bottom设置为px)for%,则会根据当前父元素/字体大小输出相对数。
选项2 (我个人更喜欢这个选项)
parseFloat($('#some_DOM_element_ID').css('margin-bottom'));
示例输出将为:20(如果margin-bottom设置为px)for%,则会根据当前父元素/字体大小输出相对数。
parseFloat()函数分析一个string并返回一个浮点数。
parseFloat()函数确定指定string中的第一个字符是否是一个数字。 如果是,则parsingstring直到达到数字的末尾,然后将该数字作为数字返回,而不是string。
选项2的优点是,如果返回十进制数字(例如20.32322px),您将得到小数点后面返回的数字。 如果您需要返回特定的数字,这很有用,例如,如果您的margin-bottom设置为em或%
parseint
将截断任何十进制值(例如, 1.5em
给出1
)。
尝试使用正则expression式replace
函数例如
$this.css('marginBottom').replace(/([\d.]+)(px|pt|em|%)/,'$1');
获取没有单位的元素宽度的最简单的方法是:
target.width()
来源: https : //api.jquery.com/width/#width2
你可以实现这个非常简单的jQuery插件:
插件定义:
(function($) { $.fn.cssValue = function(p) { var result; return isNaN(result = parseFloat(this.css(p))) ? 0 : result; }; })(jQuery);
它对旧IE版本中可能出现的NaN
值有抵抗(反而会返回0
)
用法:
$(this).cssValue('marginBottom');
请享用! 🙂
如果只是“px”,你也可以使用:
$(this).css('marginBottom').slice(0, -2);
为了改善接受的答案使用这个:
Number($(this).css('marginBottom').replace(/[^-\d\.]/g, ''));
在保留小数的同时应该删除单位。
var regExp = new RegExp("[az][AZ]","g"); parseFloat($(this).css("property").replace(regExp, ""));
使用
$(this).cssUnit('marginBottom');
它返回一个数组。 第一个索引返回底部边界值(示例20为20像素),第二个索引返回底部边界单位(示例像素为20像素)