|
Determining Element Page Coordinates, Part 4
IE Win - Final Comments
The Functions
The functions are complete for IE for Windows. They are functional but not complete for NS6+:
function DL_GetElementLeft(eElement)
{
if (!eElement && this) // if argument is invalid
{ // (not specified, is null or is 0)
eElement = this; // and function is a method
} // identify the element as the method owner
var DL_bIE = document.all ? true : false; // initialize var to identify IE
var nLeftPos = eElement.offsetLeft; // initialize var to store calculations
var eParElement = eElement.offsetParent; // identify first offset parent element
while (eParElement != null)
{ // move up through element hierarchy
if(DL_bIE) // if browser is IE, then...
{
if( (eParElement.tagName != "TABLE") && (eParElement.tagName != "BODY") )
{ // if parent is not a table or the body, then...
nLeftPos += eParElement.clientLeft; // append cell border width to calcs
}
}
else // if browser is Gecko, then...
{
if(eParElement.tagName == "TABLE") // if parent is a table, then...
{ // get its border as a number
var nParBorder = parseInt(eParElement.border);
if(isNaN(nParBorder)) // if no valid border attribute, then...
{ // check the table's frame attribute
var nParFrame = eParElement.getAttribute('frame');
if(nParFrame != null) // if frame has ANY value, then...
{
nLeftPos += 1; // append one pixel to counter
}
}
else if(nParBorder > 0) // if a border width is specified, then...
{
nLeftPos += nParBorder; // append the border width to counter
}
}
}
nLeftPos += eParElement.offsetLeft; // append left offset of parent
eParElement = eParElement.offsetParent; // and move up the element hierarchy
} // until no more offset parents exist
return nLeftPos; // return the number calculated
}
function DL_GetElementTop(eElement)
{
if (!eElement && this) // if argument is invalid
{ // (not specified, is null or is 0)
eElement = this; // and function is a method
} // identify the element as the method owner
var DL_bIE = document.all ? true : false; // initialize var to identify IE
var nTopPos = eElement.offsetTop; // initialize var to store calculations
var eParElement = eElement.offsetParent; // identify first offset parent element
while (eParElement != null)
{ // move up through element hierarchy
if(DL_bIE) // if browser is IE, then...
{
if( (eParElement.tagName != "TABLE") && (eParElement.tagName != "BODY") )
{ // if parent a table cell, then...
nTopPos += eParElement.clientTop; // append cell border width to calcs
}
}
else // if browser is Gecko, then...
{
if(eParElement.tagName == "TABLE") // if parent is a table, then...
{ // get its border as a number
var nParBorder = parseInt(eParElement.border);
if(isNaN(nParBorder)) // if no valid border attribute, then...
{ // check the table's frame attribute
var nParFrame = eParElement.getAttribute('frame');
if(nParFrame != null) // if frame has ANY value, then...
{
nTopPos += 1; // append one pixel to counter
}
}
else if(nParBorder > 0) // if a border width is specified, then...
{
nTopPos += nParBorder; // append the border width to counter
}
}
}
nTopPos += eParElement.offsetTop; // append top offset of parent
eParElement = eParElement.offsetParent; // and move up the element hierarchy
} // until no more offset parents exist
return nTopPos; // return the number calculated
}
The functions can be called in either of two ways:
elementReference.getTrueXPosition = DL_GetElementLeft;
elementReference.getTrueYPosition = DL_GetElementTop;
var nMyElementsTrueXPosition = elementReference.getTrueXPosition();
var nMyElementsTrueYPosition = elementReference.getTrueYPosition();
or:
var nMyElementsTrueXPosition = DL_GetElementLeft(elementReference);
var nMyElementsTrueYPosition = DL_GetElementTop(elementReference);
The functions are currently intended for use in IE for Windows and NS6+.
|