我找到的唯一解决方案是($(this).innerHeight() – $(this).height())/ 2
但是/ 2不是正确的选项,因为用户可以拥有padding-top:0px和padding-bottom:20px.
有没有办法做出更准确的填充值?
我正在考虑css(‘padding-top’),然后解析它,只需要int部分,但是值可以是“em”,而不是“px”
然后为每个值类型创建switch语句?对于一个,对于另一个?
这一切都有点复杂,需要更多的代码空间
解决方法
jQuery的主要优点之一是它是可插拔的,所以如果您有一个不需要立即满足的图书馆,有一个庞大的外观插件的搜索.如果没有人做任何你想要的事情,那么自己动手很容易.
我认为正确的方式去这里,如果你找不到你想要的插件,最后一个:自己编写.
我认为正确的方式去这里,如果你找不到你想要的插件,最后一个:自己编写.
但是,请确保您自己清楚插件的规格.如果元素没有用于填充的CSS设置,该怎么办?是否应该在此元素上返回样式,或计算样式?对于无效的css会发生什么(比如’padding-top:10 unitsThatDontExist;’或’padding-left:two;’)?
到get you started – 这是使用你自己的插件可能看起来像你的代码:
var topPadding = $('#anElement').padding('top');
为了做到这一点,只需编写一个这样的插件:
$.fn.padding(direction) { // calculate the values you need,using a switch statement // or some other clever solution you figure out // this now contains a wrapped set with the element you apply the // function on,and direction should be one of the four strings 'top',// 'right','left' or 'bottom' // That means you could probably do something like (pseudo code): var intPart = this.css('padding-' + direction).getIntegerPart(); var unit = this.css('padding-' + direction).getUnit(); switch (unit) { case 'px': return intPart; case 'em': return ConvertEmToPx(intPart) default: // Do whatever you feel good about as default action // Just make sure you return a value on each code path } };