使用jQuery的填充或边距值(以像素为单位)为整数


207

jQuery具有height()和width()函数,这些函数以整数形式返回像素的高度或宽度。

如何使用jQuery 以像素为单位并以整数形式获取元素的填充或边距值?

我的第一个想法是执行以下操作:

var padding = parseInt(jQuery("myId").css("padding-top"));

但是,例如,如果在ems中给出了填充,我如何获得以像素为单位的值?


通过查看Chris Pebble建议的JSizes插件,我意识到我自己的版本是正确的:)。jQuery始终返回以像素为单位的值,因此只需将其解析为整数即可。

感谢克里斯·佩布尔(Chris Pebble)和伊恩·罗宾逊(Ian Robinson)


您能从以下可用答案中选择一个答案吗?
Wes模式

4
在此主题中给人的注释:使用时始终指定基数parseInt。引用MDN:“ radix介于2到36之间的一个整数,表示上述字符串的基数(数学数字系统的基数)。十进制数字系统指定10。始终指定此参数以避免读者混淆并确保可预测的行为未指定基数时,不同的实现通常会产生不同的结果,通常将值默认为10。” 请参阅:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…–
dgellow

Answers:


226

您应该可以使用CSS(http://docs.jquery.com/CSS/css#name)。您可能需要更具体一些,例如“ padding-left”或“ margin-top”。

例:

的CSS

a, a:link, a:hover, a:visited, a:active {color:black;margin-top:10px;text-decoration: none;}

JS

$("a").css("margin-top");

结果是10px。

如果要获取整数值,可以执行以下操作:

parseInt($("a").css("margin-top"))

5
我没有检查jQuery方法是否实际返回“ px”后缀,但是JSizes当返回值传递给ParseInt(...)FYI 时,另一个答案(我最终使用的)的插件返回一个整数。
丹·赫伯特

12
仅供参考:jQuery确实添加了“ px”,因此Ian的解决方案可以工作,并且在传递给parseInt()时也将返回一个整数,并且不需要插件:parseInt($('a').css('margin-top').replace('px', ''))
Peter Rust

56
parseInt函数是快于铬代替( 'PX', '')49%jsperf.com/replace-vs-parseint
银行

17
如果在CSS中将padding / margin表示为em或pt,是否.css()仍将返回末尾带有“ px”的值?
Ingredient_15939'9

22
@ ingredient_15939-刚刚尝试过,是的;它计算实际像素值,并以px返回。边框宽度相同。我知道这个老问题,但是没有人回答您的问题,我认为我会这样做以帮助其他后来者...
Whelkaholism

79

比较外部和内部高度/宽度,以获取总边距和填充:

var that = $("#myId");
alert(that.outerHeight(true) - that.innerHeight());

大提示!帮助了我
安倍·彼得罗

1
我没有意识到outerHeight存在。非常感谢你!
AlexMorley-Finch 2011年

6
请记住,outerWidth /高度包括边框宽度也不过
electrichead

7
innertWidth / innerHeight在其计算中还包括了填充,要获得没有填充的宽度/高度,您需要使用.width()和.height()。api.jquery.com/innerWidth api.jquery.com/width api.jquery.com/outerWidth
Andrew Ensley

2
that.outerHeight(true) - that.outerHeight()将给出总的垂直边距,因为outerHeight()将包括填充和边框,但不包括边距。请参阅api.jquery.com/outerWidth/
Aximili

35

parseInt函数具有一个“ radix”参数,该参数定义了转换时使用的数字系统,因此调用parseInt(jQuery('#something').css('margin-left'), 10);将返回左整数作为整数。

这就是JSizes的用途。


3
谢谢您,我讨厌必须包含用于微小功能的插件。
布莱恩

2
你甚至都不需要默认通过“基数”,因为它以10
亚历山大鸟

5
请注意,parseInt可以返回NaN(然后,该NaN随后将使基于该变量的计算失败)-之后添加isNaN检查!实施例的情况下:parseInt('auto', 10);auto是有效的margin-left)。
Thomas

@sethAlexanderBird是您的正确说法,指出基数默认为10,但是如果代码对您很重要(并且可能应该如此),则如果您不进行操作,jsLint和jsHint会对您发出嘘声。
格雷格

30

请不要只是为了做一些本机可用的加载另一个库!

jQuery .css()会将%和em转换为与它们等效的像素(以开始),并将从返回的字符串的末尾parseInt()删除'px'并将其转换为整数:

http://jsfiddle.net/BXnXJ/

$(document).ready(function () {
    var $h1 = $('h1');
    console.log($h1);
    $h1.after($('<div>Padding-top: ' + parseInt($h1.css('padding-top')) + '</div>'));
    $h1.after($('<div>Margin-top: ' + parseInt($h1.css('margin-top')) + '</div>'));
});

11

以下是获取周围尺寸的方法:

var elem = $('#myId');

var marginTopBottom  = elem.outerHeight(true) - elem.outerHeight();
var marginLeftRight  = elem.outerWidth(true)  - elem.outerWidth();

var borderTopBottom  = elem.outerHeight() - elem.innerHeight();
var borderLeftRight  = elem.outerWidth()  - elem.innerWidth();

var paddingTopBottom  = elem.innerHeight() - elem.height();
var paddingLeftRight  = elem.innerWidth()  - elem.width();

请注意,paddingTopBottom例如,每个变量都包含元素两侧的边距之和。即paddingTopBottom == paddingTop + paddingBottom。我想知道是否有办法将它们分开。当然,如果它们相等,则可以除以2 :)


true =包含保证金。+1000互联网
标志符号

这是最好的解决方案,因为它也可以使用IE 7。请参阅:stackoverflow.com/questions/590602/...
Leniel Maccaferri

9

这个简单的功能可以做到:

$.fn.pixels = function(property) {
    return parseInt(this.css(property).slice(0,-2));
};

用法:

var padding = $('#myId').pixels('paddingTop');

3
不占autoinherit%
托马斯

3
@Thomas:不对。jsfiddle.net/nXyFN jQuery似乎总是以像素为单位返回结果。
mpen 2012年

4
@Mark jsfiddle.net/BNQ6S IE7 :,NaN这取决于浏览器。据我所知,jQuery .css()不像.width()&那样不规范化.height()
托马斯(Thomas)

1
@托马斯:有趣。伊恩的解决方案(最高评分)也有同样的问题。svinto的解决方案可能是最好的。
mpen 2012年

9

解析int

parseInt(canvas.css("margin-left")); 

对于0px返回0


9

您可以像使用任何CSS属性一样来抓取它们:

alert($("#mybox").css("padding-right"));
alert($("#mybox").css("margin-bottom"));

您可以在css方法中使用第二个属性来设置它们:

$("#mybox").css("padding-right", "20px");

编辑:如果只需要像素值,请使用parseInt(val, 10)

parseInt($("#mybox").css("padding-right", "20px"), 10);

3

好的,只是回答原始问题:

您可以像这样使用可用整数获取填充:

var padding = parseInt($(“ myId”)。css(“ padding-top”)。replace(“ ems”,“”)));

如果您定义了另一种类似px的度量,只需将“ ems”替换为“ px”。parseInt将stringpart解释为错误的值,因此以...代替它很重要。


2

您还可以使用以下方法自己扩展jquery框架:

jQuery.fn.margin = function() {
var marginTop = this.outerHeight(true) - this.outerHeight();
var marginLeft = this.outerWidth(true) - this.outerWidth();

return {
    top: marginTop,
    left: marginLeft
}};

从而在您的jquery对象上添加一个称为margin()的函数,该函数返回一个类似于offset函数的集合。

fx。

$("#myObject").margin().top

2
不幸的是,这没有给您顶部和左侧的边距,而是totalVertical和totalHorizo​​ntal利润
Code Commander

然而,它可以用在其他解决方案中的一个parseInt函数功能允许更加无缝的利润率出现功能来编辑
布莱恩




0

不是坏死,但我这样做可以根据各种值确定像素:

$.fn.extend({
  pixels: function (property, base) {
    var value = $(this).css(property);
    var original = value;
    var outer = property.indexOf('left') != -1 || property.indexOf('right') != -1 
      ? $(this).parent().outerWidth()
      : $(this).parent().outerHeight();

    // EM Conversion Factor
    base = base || 16;

    if (value == 'auto' || value == 'inherit') 
        return outer || 0;

    value = value.replace('rem', '');
    value = value.replace('em', '');

    if (value !== original) {
       value = parseFloat(value);
       return value ? base * value : 0;
    }

    value = value.replace('pt', '');

    if (value !== original) {
       value = parseFloat(value);
       return value ? value * 1.333333 : 0; // 1pt = 1.333px
    }

    value = value.replace('%', '');

    if (value !== original) {
      value = parseFloat(value);
      return value ? (outer * value / 100) : 0;
    }

    value = value.replace('px', '');
    return parseFloat(value) || 0;
  }
});

这样,我们考虑了大小调整,并自动/继承。


注意parseInt()是错误的,宽度或高度可以是浮点数。
Alexis Wilke
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.