我试图在IE中获取offsetTop,但这根本不像我想要的那样。
var miniMap = $('#miniMap'),
parnts = miniMap.parents(),
l = parnts.length,
i, setVpos,
setHPos = $('#showMap').position().left;
for (i = 0; i < l; i += 1) {
if (parnts[i].className === 'smallBox') {
if (isIE) {
setVpos = parnts[i].offsetTop; // returns the wrong value
}
else {
setVpos = parnts[i].offsetTop; // works as it should
}
}
}
正如您所看到的,我正在使用jQuery。我当然可以使用jQuery offset / position()。top&amp;&amp; 。每个:
parnts.each(function() {
if ($(this).hasClass('smallBox')) {
setVpos = $(this).position().top;
} ....
..但是,我听说“.each”比使用for循环慢得多。我也很好奇,很想知道你们在jQuery之前使用了什么: - )
我的问题是当使用for循环执行它时我不能使用jQuery obj =&gt; position()。left将无效。
我用Google搜索并发现以下内容:
document.getElementById("elementID").offsetLeft // all other
document.all.elementID.offsetLeft // IE only
我想也许这可行:
if (isIE) {
setVpos = document.all.parnts[i].offsetTop;
}
..但它没有。所以现在我要求你们寻求帮助。
有什么建议吗?先谢谢!
答案 0 :(得分:1)
你显然有一个jQuery库的引用,那你为什么不使用它来获取偏移?使用jQuery,您不需要任何变量,例如isIE
。使用库的最大好处是跨浏览器兼容性。这是你如何做到的......
var off = $(parnts[i]).offset();
alert(off.top);
答案 1 :(得分:1)
我认为当使用offset()而不是其他浏览器时,你会发现IE给出了一个非常不同的答案。也许你应该尝试在给答案之前运行代码。