Je dois obtenir les coordonnées X, Y (par rapport au haut / à gauche du document) pour un élément DOM. Je ne trouve pas de plug-in ni de propriété ou de méthode jQuery pouvant me les fournir. Je peux obtenir le haut et la gauche de l'élément DOM, mais cela peut être relatif à son conteneur / parent actuel ou au document.
Réponses
Trop de publicités?vous pouvez utiliser les Dimensions plugin [Obsolète... inclus dans jQuery 1.3.2+]
offset()
Obtenir le décalage actuel de la première appariés élément, en pixels, par rapport au document.position()
Obtient en haut et à gauche de la position d'un élément par rapport à son décalage parent.
sachant cela, il est alors facile... (à l'aide de mon petit svg projet comme un exemple de page)
var x = $("#wrapper2").offset().left;
var y = $("#wrapper2").offset().top;
console.log('x: ' + x + ' y: ' + y);
sortie:
x: 53 y: 177
espérons que cela aide à ce que vous cherchez.
voici une image d'offset() et la position()
à l'aide de XRay
à l'aide de Web Developer toolbar
Ma solution est un plugin avec "solutions de contournement": + D. Mais ça marche!
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);
La fonction offset le fera pour vous.
Voici l'exemple qu'ils donnent:
var p = $("p:last");
var offset = p.offset();
p.html( "left: " + offset.left + ", top: " + offset.top );