在jQuery中,我可以很容易得到当前计算高度,包括填充,边框和可选保证金通过使用元素outerHeight() ...
// returns height of element + border + padding + margin
$('.my-element').outerHeight(true);
我怎么会在YUI做到这一点? 我目前使用的版本2.8.1。
类似这样的问题 ,我总是可以做的getComputedStyle()的高度,边框,填充和利润,但是这是很多其中包括解析返回值,并抢得需要正确的价值观和做数学自己的手工劳动。
是不是有一些同等功能的jQuery的outerHeight()
在YUI,做这一切给我吗?
解
最后我写我自己的解决方案,因为我无法找到一个jQuery outerheight()
等同。 我已经发布了解决方案, 这里的答案 。
有越来越元素的外宽度与其在YUI保证金没有内置的方式。 像@jshirley提到,有offsetWidth
,但它没有考虑利润考虑在内。 但是,您可以创建一个函数,很容易增加保证金:
Y.Node.ATTRS.outerHeight = {
getter: function () {
return this.get('offsetHeight') +
parseFloat(this.getComputedStyle('marginTop')) +
parseFloat(this.getComputedStyle('marginBottom'));
}
};
Y.Node.ATTRS.outerWidth = {
getter: function () {
return this.get('offsetWidth') +
parseFloat(this.getComputedStyle('marginLeft')) +
parseFloat(this.getComputedStyle('marginRight'));
}
};
然后,你可以通过执行外宽度Y.one(selector).get('outerWidth')
下面是根据@ jshirley的代码示例: http://jsbin.com/aretab/4/ 。
只要记住,尺寸通常在浏览器中的错误的根源,这并没有考虑到一些东西(如:文档的尺寸)的jQuery试图赶上(见https://github.com/jquery/jquery/斑点/主/ SRC / dimensions.js )。
如果你想避免体力劳动,包裹元素一个div并得到了计算样式。
如果这是你比一次做更多的事情,创建一个函数/插件重用。
据http://www.jsrosettastone.com/ ,你应该使用获得(“的offsetHeight”)。
这个例子显示了等效: http://jsbin.com/aretab/1/edit
最后我写我自己的小工具功能如下:
/**
* Calculates the outer height for the given DOM element, including the
* contributions of padding, border, and margin.
*
* @param el - the element of which to calculate the outer height
*/
function calculateElementOuterHeight(el) {
var height = 0;
var attributeHeight = 0;
var attributes = [
'height',
'border-top-width',
'border-bottom-width',
'padding-top',
'padding-bottom',
'margin-top',
'margin-bottom'
];
for (var i = 0; i < attributes.length; i++) {
// for most browsers, getStyle() will get us a value for the attribute
// that is parse-able into a number
attributeHeight = parseInt(YAHOO.util.Dom.getStyle(el, attributes[i]), 10);
// if the browser returns something that is not parse-able, like "auto",
// try getComputedStyle(); should get us what we need
if (isNaN(attributeHeight)) {
attributeHeight = parseInt(YAHOO.util.Dom.getComputedStyle(el, attributes[i]), 10);
}
// if we have an actual numeric value now, add it to the height,
// otherwise ignore it
if (!isNaN(attributeHeight)) {
height += attributeHeight;
}
}
return isNaN(height) ? 0 : height;
}
这似乎是工作在所有现代浏览器。 我已经在Chrome,火狐测试它(IDK约3.6,而最新版本的作品),Safari,Opera或与IE 7,8,9。 让我知道你们的想法!