我们正在修改一个较早存在的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);
}