我们正在修改一个较早存在的Web应用程序,并且其中一部分已开始使用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上。

最佳答案

我当前的方向是,在没有脚本的实际修复的情况下(这可能不值得工作),我正在添加此函数以在脚本本身之后运行。我添加了一些标记来简化它,它只接受菜单,并将其放置在应该放置的位置(该位置与我确定的另一个元素右对齐)。这是出于最佳目的,但确实有效。

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);
}

10-06 11:52