获取offsetTop& IE

时间:2010-02-03 15:22:57

标签: javascript

我试图在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;
}

..但它没有。所以现在我要求你们寻求帮助。

有什么建议吗?先谢谢!

2 个答案:

答案 0 :(得分:1)

你显然有一个jQuery库的引用,那你为什么不使用它来获取偏移?使用jQuery,您不需要任何变量,例如isIE。使用库的最大好处是跨浏览器兼容性。这是你如何做到的......

var off = $(parnts[i]).offset();
alert(off.top); 

offset on jQuery API

答案 1 :(得分:1)

我认为当使用offset()而不是其他浏览器时,你会发现IE给出了一个非常不同的答案。也许你应该尝试在给答案之前运行代码。