什么是jQuery的outerHeight()相当于YUI(what is the jQuery o

2019-08-01 01:41发布

在jQuery中,我可以很容易得到当前计算高度,包括填充,边框和可选保证金通过使用元素outerHeight() ...

// returns height of element + border + padding + margin
$('.my-element').outerHeight(true);

我怎么会在YUI做到这一点? 我目前使用的版本2.8.1。

类似这样的问题 ,我总是可以做的getComputedStyle()的高度,边框,填充和利润,但是这是很多其中包括解析返回值,并抢得需要正确的价值观和做数学自己的手工劳动。

是不是有一些同等功能的jQuery的outerHeight()在YUI,做这一切给我吗?

最后我写我自己的解决方案,因为我无法找到一个jQuery outerheight()等同。 我已经发布了解决方案, 这里的答案 。

Answer 1:

有越来越元素的外宽度与其在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 )。



Answer 2:

如果你想避免体力劳动,包裹元素一个div并得到了计算样式。

如果这是你比一次做更多的事情,创建一个函数/插件重用。



Answer 3:

据http://www.jsrosettastone.com/ ,你应该使用获得(“的offsetHeight”)。

这个例子显示了等效: http://jsbin.com/aretab/1/edit



Answer 4:

最后我写我自己的小工具功能如下:

/**
 * 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。 让我知道你们的想法!



文章来源: what is the jQuery outerHeight() equivalent in YUI