如何使用jQuery获取实际的CSS值?

我正在使用contenteditable = true来调整几个DIV的高度,以便在IE Quirksmode中修复盒子模型问题。

DIV的风格是:

 height: 14px; padding: 6px; border: 1px solid black; overflow: hidden; 

到目前为止,我一直使用$("selector").css("height")获取CSS高度值,并使用该值进行进一步计算,但最近将我的jQuery库更新为最新版本,此方法现已破坏。

详细说明; 在jQuery 1.4.2 .css("height")将返回’14px’而jQuery 1.6.2返回’0px’如果元素及其所有祖先是可见的,否则’14px’。

我猜测前者是使用IE Quirksmode盒模型计算的(14px高度 – 2x 6px填充 – 2x 1px border = 0px),后者直接从样式表中获取。 无论可见性如何,我都希望获得前者 – 是否有任何“漂亮”的方式来获取实际的CSS值(“漂亮”意味着没有在document.styleSheets数组中查找它)?

编辑:

首先,我忘记了DIV上的一个重要的样式属性: overflow: hidden (现已更正)。

另外我认为值得强调的是,这个问题只发生在Quirks Mode中的Internet Explorer中。 据我所知,它不是任何其他(当前)浏览器/模式的问题(我没有测试所有,所以不是100%肯定)。

为了进一步阐述问题(并回答一些关于可能解决方案的建议),我对字段和jQuery中不同函数返回的值进行了一些测试:

jQuery 1.4.2:

 Element visible: true .css('height'): 14px .height(): 0 .outerHeight(): 14 Element visible: false .css('height'): 14px .height(): 0 .outerHeight(): 0 

jQuery 1.6.2:

 Element visible: true .css('height'): 0 .height(): 0 .outerHeight(): 14 Element visible: false .css('height'): 14px .height(): 14 .outerHeight(): 28 

.outerHeight(true)对我没用,因为无论盒子模型如何,边距都没有效果。 元素可见性使用$("selector").is(":visible")进行测试$("selector").is(":visible")

对,那么如何使用这些数字呢? 要修复盒子模型高度,我必须进行以下计算:

 newHeight = oldHeight + borderWidth (top & bottom) + padding (top & bottom) 

换句话说,我需要14px的值。 有人可能会争辩说,问题的解决方案是在元素可见的同时获取.outerHeight()的值,同时获取.css('height')时(我正在计划这样做) ),但实际上并没有回答原来的问题; 我如何获得实际的CSS值?

为了完整起见,这里有一个示例HTML /脚本,它将从测试中复制我的数字(我没有对此进行实际测试,但最终结果是相同的 – 还记得在测试之前将IE设置为Quirksmode) :

      .input { height: 14px; padding: 6px 8px; border: 1px solid black; overflow: hidden; } .hidden { display: none; }    
test
$(document).ready(function(){ var t = ""; $(".input").each(function(){ t+= "visible: " + $(this).is(":visible") +"\n" + ".css('height'): " + $(this).css("height")+ "\n" + ".height(): " + $(this).height()+ "\n" + ".outerHeight(): " + $(this).outerHeight()+ "\n\n"; }); alert(t); });

是:

 $("selector").height(); 

要么

 $("selector").outerHeight(); 

解决你的问题?

您可以使用.height()来获取实际高度。 此外,您可以使用.innerHeight()来获取元素高度,包括填充和.outerHeight()以获取高度,填充,边框和(可选)边距。