Getting offsetTop of element in a table

10,785

offsetTop returns a value relative to offsetParent; you need to recursively add offsetParent.offsetTop through all of the parents until offsetParent is null. Consider using jQuery's offset() method.

EDIT: If you don't want to use jQuery, you can write a method like this (untested):

function offset(elem) {
    if(!elem) elem = this;

    var x = elem.offsetLeft;
    var y = elem.offsetTop;

    while (elem = elem.offsetParent) {
        x += elem.offsetLeft;
        y += elem.offsetTop;
    }

    return { left: x, top: y };
}
Share:
10,785
Matthew
Author by

Matthew

Updated on July 22, 2022

Comments

  • Matthew
    Matthew almost 2 years

    I can't seem to figure out how to get the offsetTop of an element within a table. It works fine on elements outside tables, but all of the elements within a table return the same result, and it's usually at the top of the page. I tried this in Firefox and Chrome. How do I get the offsetTop of an element in a table?

  • KeatsKelleher
    KeatsKelleher over 13 years
    This doesn't work in IE7 (reliably). IE5-7 doesn't count elements with relative positioning as offsetParents.
  • Mo.
    Mo. about 10 years
    @SLaks brilliant solution :)