我们正在修改旧的预先存在的网络应用程序,并且已经开始使用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上发布了该脚本。
答案 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);
}