Вы выключены узлом. Вы инициализируете current
итератора первому узлу, поэтому hasNext
должен проверить, что current != null
.
Можно сделать это в обоих - получают положение относительно документа, затем вычитают положение прокрутки.
var e = document.getElementById('xxx');
var offset = {x:0,y:0};
while (e)
{
offset.x += e.offsetLeft;
offset.y += e.offsetTop;
e = e.offsetParent;
}
if (document.documentElement && (document.documentElement.scrollTop || document.documentElement.scrollLeft))
{
offset.x -= document.documentElement.scrollLeft;
offset.y -= document.documentElement.scrollTop;
}
else if (document.body && (document.body.scrollTop || document.body.scrollLeft))
{
offset.x -= document.body.scrollLeft;
offset.y -= document.body.scrollTop;
}
else if (window.pageXOffset || window.pageYOffset)
{
offset.x -= window.pageXOffset;
offset.y -= window.pageYOffset;
}
alert(offset.x + '\n' + offset.y);
Попробуйте размеры плагин jQuery . См. эта демонстрация .
$('#myelement.').offset();
В IE и Firefox 3, можно использовать getBoundingClientRect для этого; никакая необходимая платформа.
, Но, да, необходимо использовать платформу, если необходимо поддерживать другие браузеры также.
Вы могли вычесть offsetTop отделения из document.body.scrollTop
, Это, кажется, работает над IE7 и FF3, но на очень простой странице. Я не согласовал с вложенными ОТДЕЛЕНИЯМИ
Используя Прототип это было бы:
$('divname').viewportOffset.top
$('divname').viewportOffset.left