在页面加载时调整元素大小时,jQuery函数不一致

时间:2009-06-23 23:44:58

标签: javascript jquery

嗨! 我已经构建了一个小脚本来检查页面加载时左边距的大小,调整div的大小以填充它,并将标题div更改为浮动它旁边。

以下是代码:

function buildHeader() {
            var containerMarginLeft = $(".container_16:not(:first)").css("margin-left");
            var headerHeight = $("#header").height();
            $("#stripe").width(containerMarginLeft).height(headerHeight).css("float", "left");
            $(".container_16:first").css("float", "left");
            $("#header").css("margin-left", 0).width(950);
        }

        $(document).ready(function(){   
            // Manipulate layout for the first time
            buildHeader();
            // Manipulate layout when window is resized
            var resizeTimer = null;
            $(window).bind('resize', function() {
                if (resizeTimer) clearTimeout(resizeTimer);
                      resizeTimer = setTimeout(buildHeader, 100);
                   });
        });

示范就在这里:http://robertmay.me.uk/mockups/plane.html(它创建了左侧延伸的线)。 现在,它适用于webkit浏览器。它在Mozilla中不起作用,我甚至没有在IE中尝试过。 任何人都有任何想法,为什么它似乎不适用于Mozilla?我觉得它可能与CSS有关。

1 个答案:

答案 0 :(得分:1)

$(".container_16:not(:first)").css("margin-left");

无论窗口有多宽,此行都会在Firefox中显示“0px”的结果。但是,Safari中的Firebug Lite会根据窗口的宽度显示此值。

问题似乎是语句的.css('margin-left')部分,因为$(“。container_16:not(:first)”)在两个浏览器中都返回相同的元素。实际上,Firefox中的Firebug将此元素的Computed Style显示为marginLeft和marginRight的'0px',但在Safari中这不是零。

正如预期的那样,从'margin-left'变为'marginLeft'没有区别,也没有直接访问属性,例如$(“。container_16:not(:first)”)[0] .style.marginLeft,因为Firefox首先计算错误。

抱歉,我没有答案,但希望这会引导您朝着正确的方向前进。对我而言,虽然我会尝试使用CSS来调整布局,但仅作为最后的手段使用JavaScript修复。