Если вы не хотите использовать jQuery, вы можете скопировать / вставить отсюда (код LGPL); http://code.google.com/p/ra-ajax/source/browse/trunk/Ra/Js/Ra.js
Место для поиска - это функция "абсолютизации" в строке №. 220, который рекурсивно вычисляет размер «узлов-предков» в цикле while.
Вставлено сюда для ссылок;
var valueT = this.offsetTop || 0;
var valueL = this.offsetLeft || 0;
var el = this.offsetParent;
while (el) {
Ra.extend(el, Ra.Element.prototype);
if( el.tagName == 'BODY' ) {
break;
}
var pos = el.getStyle('position');
if( pos == 'relative' || pos == 'absolute') {
break;
}
valueT += el.offsetTop || 0;
valueL += el.offsetLeft || 0;
el = el.offsetParent;
}
"this" - это элемент DOM ...
Однако я подозреваю, что то, что у вас есть, является абсолютно позиционированным div внутри другого div с позиции: относительной, в этом случае вы можете просто использовать;
var y = parseInt(myElement.style.top, 10);
var x = parseInt(myElement.style.left, 10);
, что на несколько порядков быстрее, чем выполнение "смещенных циклов" ...