46 lines
1.4 KiB
JavaScript
46 lines
1.4 KiB
JavaScript
// xHeight, Copyright 2001-2005 Michael Foster (Cross-Browser.com)
|
|
// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL
|
|
|
|
function xHeight(e,h)
|
|
{
|
|
if(!(e=xGetElementById(e))) return 0;
|
|
if (xNum(h)) {
|
|
if (h<0) h = 0;
|
|
else h=Math.round(h);
|
|
}
|
|
else h=-1;
|
|
var css=xDef(e.style);
|
|
if (e == document || e.tagName.toLowerCase() == 'html' || e.tagName.toLowerCase() == 'body') {
|
|
h = xClientHeight();
|
|
}
|
|
else if(css && xDef(e.offsetHeight) && xStr(e.style.height)) {
|
|
if(h>=0) {
|
|
var pt=0,pb=0,bt=0,bb=0;
|
|
if (document.compatMode=='CSS1Compat') {
|
|
var gcs = xGetComputedStyle;
|
|
pt=gcs(e,'padding-top',1);
|
|
if (pt !== null) {
|
|
pb=gcs(e,'padding-bottom',1);
|
|
bt=gcs(e,'border-top-width',1);
|
|
bb=gcs(e,'border-bottom-width',1);
|
|
}
|
|
// Should we try this as a last resort?
|
|
// At this point getComputedStyle and currentStyle do not exist.
|
|
else if(xDef(e.offsetHeight,e.style.height)){
|
|
e.style.height=h+'px';
|
|
pt=e.offsetHeight-h;
|
|
}
|
|
}
|
|
h-=(pt+pb+bt+bb);
|
|
if(isNaN(h)||h<0) return;
|
|
else e.style.height=h+'px';
|
|
}
|
|
h=e.offsetHeight;
|
|
}
|
|
else if(css && xDef(e.style.pixelHeight)) {
|
|
if(h>=0) e.style.pixelHeight=h;
|
|
h=e.style.pixelHeight;
|
|
}
|
|
return h;
|
|
}
|