jQuery x y document coordinates of DOM object jQuery x y document coordinates of DOM object javascript javascript

jQuery x y document coordinates of DOM object


you can use Dimensions plugin [Deprecated... included in jQuery 1.3.2+]

offset()
Get the current offset of the first matched element, in pixels, relative to the document.

position()
Gets the top and left position of an element relative to its offset parent.

knowing this, then it's easy... (using my little svg project as an example page)

var x = $("#wrapper2").offset().left;var y = $("#wrapper2").offset().top;console.log('x: ' + x + ' y: ' + y);

output:

x: 53 y: 177

hope it helps what you're looking for.

here's an image of offset() and position()

using XRay

alt text

using Web Developer toolbar

alt text


My solution is a plugin with "workarounds" :+D .But Works!

jQuery.fn.getPos = function(){        var o = this[0];        var left = 0, top = 0, parentNode = null, offsetParent = null;        offsetParent = o.offsetParent;        var original = o;        var el = o;        while (el.parentNode != null) {            el = el.parentNode;            if (el.offsetParent != null) {                var considerScroll = true;                if (window.opera) {                    if (el == original.parentNode || el.nodeName == "TR") {                        considerScroll = false;                    }                }                if (considerScroll) {                    if (el.scrollTop && el.scrollTop > 0) {                        top -= el.scrollTop;                    }                    if (el.scrollLeft && el.scrollLeft > 0) {                        left -= el.scrollLeft;                    }                }            }                        if (el == offsetParent) {                left += o.offsetLeft;                if (el.clientLeft && el.nodeName != "TABLE") {                    left += el.clientLeft;                }                top += o.offsetTop;                if (el.clientTop && el.nodeName != "TABLE") {                    top += el.clientTop;                }                o = el;                if (o.offsetParent == null) {                    if (o.offsetLeft) {                        left += o.offsetLeft;                    }                    if (o.offsetTop) {                        top += o.offsetTop;                    }                }                offsetParent = o.offsetParent;            }        }        return {            left: left,            top: top        };    };

Usage:

var p = $("#wrapper2").getPos();alert("top:"+p.top+"; left:"+p.left);


The offset function will do that for you.

Here is the example they give:

var p = $("p:last");var offset = p.offset();p.html( "left: " + offset.left + ", top: " + offset.top );