首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过坐标获取子元素

问通过坐标获取子元素
EN

Stack Overflow用户
提问于 2014-11-28 19:53:31
回答 2查看 637关注 0票数 1

考虑下面的标记

代码语言:javascript
复制
<div id = "parent">
 <a id = "child1" href = "#">1</a>
 <a id = "child2" href = "#">2</a>
 <a id = "child3" href = "#">3</a>
 <a id = "child4" href = "#">4</a>
</div>

我需要通过它的位置(X和Y坐标)在父元素中获取一个子元素。当我使用var element = document.elementFromPoint(x, y);时,它返回父元素。有没有办法获取子元素?

EN

回答 2

Stack Overflow用户

发布于 2014-11-28 20:01:07

这可能是由错误的标记引起的吗?在应该关闭-a标签的地方有关闭的div标签。

票数 0
EN

Stack Overflow用户

发布于 2019-04-26 15:16:29

You could use document.elementsFromPoint instead.

它返回一个数组。

const elementsAtPoint = document.elementsFromPoint(x, y)

const numberOfElementsAtPoint = elementsAtPoint.length

嵌套最深的元素在数组中排在第一位,而最外层的元素排在最后。您可以通过id找到父元素,并返回数组中位于该元素之前的元素。

类似于下面这样的详细步骤:

代码语言:javascript
复制
const elementsAtPoint = document.elementsFromPoint(x, y);

const elementIds = elementsAtPoint.map(element => element.id);

const parentIndex = elementIds.indexOf("parent");

const childIndex = parentIndex - 1;

const childElement = elementsAtPoint[childIndex];

我在控制台上做了一些测试,我认为这应该可以工作。你必须处理那些你也找不到元素的情况。

我可能会将其重写为一个函数,如下所示:

代码语言:javascript
复制
function getChildAtPoint(parentId, x, y){
  const elementsAtPoint = document.elementsFromPoint(x, y);

  const elementIds = elementsAtPoint.map(element => element.id);

  const parentIndex = elementIds.indexOf(parentId);

  // If we can't find element with parentId, or it is the first 
  // in the array we found nothing.
  if( parentIndex < 1 ){ return; };

  const childIndex = parentIndex - 1;

  const childElement = elementsAtPoint[childIndex];

  return childElement;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27188091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档