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