1

我们正在修改一个旧的预先存在的网络应用程序,并且作为其中的一部分已经开始使用 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上发布了脚本。

4

1 回答 1

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);
}
于 2013-09-24T18:13:20.050 回答