jQuery .height()无法按预期工作

时间:2012-05-16 13:19:44

标签: javascript jquery html css

我有一个页面,我希望彼此相邻的div具有相同的高度。

我有以下功能:

function setProjectsHeight() {
    var count = 0;
    $(".project").each(function() {
        if(count % 3 === 0) { 
            var highest = 0;
            for(i=count;i<=count+2;i++) {
                if($("div.project#"+i).height() > highest) { 
                    highest = $("div.project#"+i).height(); 
                }
            }
            console.log(highest);
        }
        count++;
    });
}

不知何故,身高始终为零。选择器似乎是正确的(测试过),当console.log()具有相同选择器的宽度时,它返回200(正确)。

编辑:刚刚解决了! 不知怎的,我有了在css中设置“body {display:none}”的想法,并在document.ready()的末尾将此属性设置回'block'。我这样做是因为我使用了jQuery UI按钮,用户看到这些按钮从普通链接切换到UI布局。

当我删除此功能时,一切都恢复了。看来当setProjectsHeight()被调用时,body仍然显示:block。因此,没有计算出的高度。

感谢您的帮助!

6 个答案:

答案 0 :(得分:3)

尝试从window.load()事件而不是document.ready()调用该函数。

这个问题的原因是,jQuery不会启动width()和height()设置,直到所有img / object / ...元素都完成加载 - ready()会在页面出现时立即触发已处理完毕,但某些对象可能仍在下载。

答案 1 :(得分:2)

确保您有一个清除浮动的元素/应用一个clearfix(如果有任何浮动)。如果你不这样做,至少父容器不会扩展到它应该具有的高度。

还尝试使用.outerHeight(),因为这包括边框大小和填充。

答案 2 :(得分:1)

你的选择器可能是错的。你应该只使用id选择器,因为ids在文档中是唯一的,并且查找速度最快:

$('#'+i)

正如人们所提到的那样,无法使用数字开头的id(但在大多数浏览器中都有效)

你的DOM中也可能有重复的id,在这种情况下,没有什么能像你期望的那样工作。 dom ID必须是唯一的

答案 3 :(得分:1)

您是否确定每个.project元素都具有相应的ID属性,因为$("div.project#"+i)选择器需要ID为0,1,2等?

答案 4 :(得分:0)

如果标签ID为1, 2, 3,请在项目后留出空格

$("div.project #"+i)

答案 5 :(得分:0)

刚刚解决了!不知怎的,我有了在css中设置“body {display:none}”的想法,并在document.ready()的末尾将此属性设置回'block'。我这样做是因为我使用了jQuery UI按钮,用户看到这些按钮从普通链接切换到UI布局。

当我删除此功能时,一切都恢复了。看来当setProjectsHeight()被调用时,body仍然显示:block。因此,没有计算出的高度。

感谢您的帮助!