有没有办法在jQuery中检测隐式和显式CSS高度值?

时间:2014-06-10 17:34:40

标签: javascript jquery html css

在jQuery中,即使没有使用CSS显式设置高度属性,$('#foo').height()$('#foo').css('height')都会返回一个值。有没有办法检测元素是否没有明确的高度,即它只是根据其内容进行渲染?

以下是我撰写的示例:http://jsfiddle.net/Enn6p/2/

修改

为了进一步澄清我的问题,$('#foo').css('min-height')$('#foo').css('max-height')已正确返回空字符串(如果未明确设置)。我正在寻找一种方法来确定是否通过CSS设置显式height值。

使用案例

我有一个脚本试图使浮动元素具有相同的高度。它通过循环元素来查看哪一个是最高的,然后将该高度应用于所有元素。在某些情况下,这些元素已经有明确的高度设置,但其他元素是隐式呈现的。

我现在想要添加撤消此功能的功能,并使一切恢复到原来的高度。为了做到这一点,我需要知道元素最初是否设置了高度,或者高度是否为“auto”。一旦我能够做到这一点,我可以将原始值存储在元素的数据集合中,然后使用它来稍后恢复到原始高度。

2 个答案:

答案 0 :(得分:2)

在一些旧版本的jQuery中,它是可能的:

http://jsfiddle.net/strikernl/y3P3A/

但现在您应该使用如下函数:

function sizeDefined(obj){
   var tmp = obj.clone().html('').appendTo($('body'));
    var w = (tmp.width()==0  ? "no":"yes");
    var h = (tmp.height()==0  ? "no":"yes");
    tmp.remove();
   return  [w,h];
}

http://jsfiddle.net/Enn6p/12/

答案 1 :(得分:0)

基本上,如果你摆脱了元素的内容并测量它的高度,它将等于0,除非它具有先前设置的高度(作为样式)。所以通过这个推理:

 function hasSetHeight(elem){
    var html=elem.html();
    elem.html('');
    height = elem.height();
    elem.html(html);
    return (height > 0);
}

删除元素的所有内容,测量其高度,如果元素具有设置的高度,则返回true或false。