IE Standard与Quirks处理offsetLeft

时间:2013-09-24 01:08:31

标签: javascript jquery css internet-explorer

我们正在修改旧的预先存在的网络应用程序,并且已经开始使用IE10查看它。这个应用程序有一个第三方菜单控件(menu9_com.js?),在我们注意到的众多问题中,是这个菜单在标准模式下在IE7 +上的定位。在FF,Chrome或任何版本的带Quirks的IE中 - 它的位置正确。然而,在标准模式下,它被推向了极右侧。

我已将下面的功能确定为问题的可能来源。在任何模式下运行,StartLeft的值大致相同。在工作模式中,它以一个值 - 按照定义 - 工作。在破碎的模式中,它要高得多。

虽然还不完全清楚,但我相信该功能是从给定目标位置向上走DOM并添加值来计算它正在添加的菜单元素的“总”偏移量。我认为问题归结为offsetLeft(也许是offsetParent?)的不同处理方式。所以我试图找到从这个函数获得一致行为的最佳方法,但是对函数的意图不太熟悉,也没有在各种模式中对offsetLeft等的行为。

这是功能:

function ClcTrgt() {
    var TLoc=Nav4?FLoc.document.layers[TargetLoc]:DomYesFLoc.document.getElementById(TargetLoc):FLoc.document.all[TargetLoc];
    if (DomYes) {
        while (TLoc) {
            StartTop += TLoc.offsetTop;
            StartLeft += TLoc.offsetLeft;
            TLoc = TLoc.offsetParent;
        }
    }
    else {
        StartTop+=Nav4?TLoc.pageY:TLoc.offsetTop;
        StartLeft+=Nav4?TLoc.pageX:TLoc.offsetLeft;
    }
}

有什么建议吗?例如,如果我知道如何,我会将此函数转换为使用jQuery。

更新:
我已在pastebin上发布了该脚本。

1 个答案:

答案 0 :(得分:0)

我当前的方向,在没有对脚本的实际修复(可能不值得工作)的情况下,添加此函数以在脚本本身之后运行。我添加了一些标记以方便它,它只需要菜单,并将它放在应该的位置(它与我已经识别的另一个元素右对齐)。这是从最优的,但它的工作原理。

function fixMenu9() {
    var pTD = $('#pgMenuDivTD');
    var pMN = $('#pgMenuDiv');

    var additionalOffset = ExpYes ? 3 : 0;

    var leftVal = (parseInt(pTD.offset().left) + parseInt(pTD.css('width'))) - (parseInt(pMN.css('width')) + additionalOffset);
    $('#pgMenuDiv').css('left', leftVal);
}