div.clientHeight в неIE

Дед Анвирыч

Новичок
div.clientHeight в неIE

в ИЕ -
document.getElementById('div_name').clientHeight
прокатывает.
В Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5) Gecko/20031007 Firebird/0.7 - нет

в чем засада?
 

Profic

just Profic (PHP5 BetaTeam)
В том, что всегда 0 возвращает :)
Используй цикл по offsetParent и складывай offset* до offsetParent != null
Ух как завернул :) Понятно или объяснить?
 

Дед Анвирыч

Новичок
Profic, лучше объясни :)

Кстати, вдогонку... Столкнулся с косяком - в опере (7.11 win32)<body onLoad="fnc();"> не отрабатывает...
 

Profic

just Profic (PHP5 BetaTeam)
Ой. Заметил, что тебе ширина, а не смещение нужно :) А она (ширина) по моему и так уже абсолютная - т.е. obj.offsetHeight
А вот и ф-ция, которая это использует :)
PHP:
/*
sets object obj position according to event ev in such a way, that it is will be on visible page area
Works:
-IE/6.0
-Opera/7.0
Works after fix:
-Mozilla (Gecko)/1.2+
Not works:
-Mozilla (Geck0)/1.0-
*/
function posObjByEvent (obj, ev) {
	scrlTop = document.body.scrollTop;
	scrlLeft = document.body.scrollLeft;

	evTop = ev.clientY;
	evLeft = ev.clientX;

	wndHeight = document.body.clientHeight;
	wndWidth = document.body.clientWidth;

	//objHeight = obj.clientHeight; // don't work in Gecko, eg returns allways 0
	objHeight = obj.offsetHeight; // hotfix for Gecko
	//objWidth = obj.clientWidth; // don't work in Gecko, eg returns allways 0
	objWidth = obj.offsetWidth; // hotfix for Gecko

	if (evTop - objHeight / 2 < 0) {
		objTop = evTop + scrlTop;
	} else if (evTop + objHeight / 2 > wndHeight) {
		objTop = evTop + scrlTop - objHeight;
	} else {
		objTop = evTop + scrlTop - objHeight / 2;
	}
	obj.style.top = objTop;

	if (evLeft - objWidth / 2 < 0) {
		objLeft = evLeft + scrlLeft;
	} else if (evLeft + objWidth / 2 > wndWidth) {
		objLeft = evLeft + scrlLeft - objWidth;
	} else {
		objLeft = evLeft + scrlLeft - objWidth / 2;
	}
	obj.style.left = objLeft;
	return false;
}
Такой древности не имею. Использую Opera 7.50
 
Сверху