使用 JavaScript 查找 HTML 元素的 X/Y [重复]

Posted

技术标签:

【中文标题】使用 JavaScript 查找 HTML 元素的 X/Y [重复]【英文标题】:Find X/Y of an HTML element with JavaScript [duplicate] 【发布时间】:2010-09-14 16:19:02 【问题描述】:

如果没有明确设置,我如何从 javascript 中找到 html 元素 (DIV) 的 XY 坐标?

【问题讨论】:

按照meta.stackexchange.com/questions/147643/…关闭为重复项 【参考方案1】:

我是这样做的:

// Based on: http://www.quirksmode.org/js/findpos.html
var getCumulativeOffset = function (obj) 
    var left, top;
    left = top = 0;
    if (obj.offsetParent) 
        do 
            left += obj.offsetLeft;
            top  += obj.offsetTop;
         while (obj = obj.offsetParent);
    
    return 
        x : left,
        y : top
    ;
;

【讨论】:

我想我更喜欢你返回一个对象的想法,而不是 Peter-Paul Koch 选择在他的原始解决方案中返回一个数组。【参考方案2】:

这可能很棘手,具体取决于浏览器和版本。我建议使用jQuery 和位置插件。

【讨论】:

大部分职位插件现在是 jQuery 核心的一部分。所以你可以做 $(element).offset(relativeTo: "body") - 它会给你相对于身体的对象的顶部和左侧。 太好了,我已经有几个月没有下载 jQuery 了,很高兴知道他们推出了它。【参考方案3】:

可以使用Prototype或jQuery等库,也可以使用this handy function:

它返回一个数组。

myPos = findPos(document.getElementById('something'))
x = myPos[0]
y = myPos[1]

function findPos(obj) 
  var curleft = curtop = 0;
  if (obj.offsetParent) 
    curleft = obj.offsetLeft
    curtop = obj.offsetTop
    while (obj = obj.offsetParent) 
      curleft += obj.offsetLeft
      curtop += obj.offsetTop
    
  
  return [curleft,curtop];

【讨论】:

你应该把归属地给quirksmode.org,那个功能看起来很眼熟。【参考方案4】:

对于它的价值,这是一个递归版本:

function findPos(element) 
  if (element) 
    var parentPos = findPos(element.offsetParent);
    return [
      parentPos.X + element.offsetLeft,
      parentPos.Y + element.offsetTop
    ];
   else 
    return [0,0];
  

【讨论】:

parentPos.X 应该是 parentPos[0],parentPos.Y 应该是 parentPos[1]【参考方案5】:

您可以向Element.prototype 添加两个属性以获取任何元素的顶部/左侧。

window.Object.defineProperty( Element.prototype, 'documentOffsetTop', 
    get: function ()  return this.offsetTop + ( this.offsetParent ? this.offsetParent.documentOffsetTop : 0 ); 
 );

window.Object.defineProperty( Element.prototype, 'documentOffsetLeft', 
    get: function ()  return this.offsetLeft + ( this.offsetParent ? this.offsetParent.documentOffsetLeft : 0 ); 
 );

这是一个与 jQuery 的 offset().top.left 比较结果的演示:http://jsfiddle.net/ThinkingStiff/3G7EZ/

【讨论】:

【参考方案6】:

我不确定您需要它来做什么,而这些东西总是相对的(屏幕、窗口、文档)。但是当我需要弄清楚这一点时,我发现这个网站很有帮助: http://www.mattkruse.com/javascript/anchorposition/source.html

而且我还发现有人为 jQuery 制作的工具提示插件对 x,y 定位技巧有各种有趣的见解(查看它的视口类和 jQuery 为其提供的底层支持)。 http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/

【讨论】:

以上是关于使用 JavaScript 查找 HTML 元素的 X/Y [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用javascript在html页面中查找元素的位置[重复]

JavaScript 学习-27.查找HTML DOM节点(元素)

JavaScript HTML DOM

JavaScript DOM基础:查找元素

JavaScript HTML DOM——简介和查找HTML元素

JavaScript 查找元素