jQuery有height()和width()函数,它们以像素为单位返回高度或宽度......
如何使用jQuery获取元素的填充或边距值以及整数?
我的第一个想法是做以下事情:
var padding = parseInt(jQuery("myId").css("padding-top"));
但是,如果在ems中给出填充,例如,我如何获得以像素为单位的值?
查看Chris Pebble建议的JSizes插件,我意识到我自己的版本是正确的:)。 jQuery总是以像素为单位返回值,因此只需将其解析为整数即可。
感谢Chris Pebble和Ian Robinson
答案 0 :(得分:223)
您应该可以使用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"))
答案 1 :(得分:78)
比较外部和内部高度/宽度以获得总边距和填充:
var that = $("#myId");
alert(that.outerHeight(true) - that.innerHeight());
答案 2 :(得分:35)
parseInt函数有一个“radix”参数,用于定义转换时使用的数字系统,因此调用parseInt(jQuery('#something').css('margin-left'), 10);
会将左边距返回为整数。
这是JSizes使用的。
答案 3 :(得分:29)
请不要加载另一个图书馆,只是为了做一些本来可以买到的东西!
jQuery&#39; .css()
将%&#39}转换为等同于开头的像素,parseInt()
将从'px'
中移除$(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>'));
});
返回字符串的结尾并将其转换为整数:
{{1}}
答案 4 :(得分: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:)
答案 5 :(得分:9)
这个简单的功能可以做到:
$.fn.pixels = function(property) {
return parseInt(this.css(property).slice(0,-2));
};
用法:
var padding = $('#myId').pixels('paddingTop');
答案 6 :(得分:9)
Parse int
parseInt(canvas.css("margin-left"));
为0px
返回0答案 7 :(得分:8)
你可以像any CSS attribute一样抓住它们:
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);
答案 8 :(得分:3)
好的,只是回答原来的问题:
你可以将填充作为一个可用的整数,如下所示:
var padding = parseInt函数($( “MYID”)的CSS( “填充顶”)替换( “EMS”, “”));
如果您定义了另一个测量,例如px,则将“ems”替换为“px”。 parseInt将stringpart解释为错误的值,因此将其替换为“nothing”非常重要。
答案 9 :(得分: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
答案 10 :(得分:1)
不要使用string.replace(&#34; px&#34;,&#34;&#34;));
使用parseInt或parseFloat!
答案 11 :(得分:0)
我可能会以非常舒适的方式使用github.com/bramstein/jsizes jquery插件来填充和填充页面,谢谢......
答案 12 :(得分:0)
从Quickredfox无耻地采用。
jQuersy.fn.cssNum = function(){
return parseInt(jQuery.fn.css.apply(this, arguments), 10);
};
<强>更新强>
更改为parseInt(val, 10)
,因为它比parseFloat
更快。
答案 13 :(得分: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;
}
});
这样,我们考虑了大小调整和自动/继承。