javascript - 通过坐标获取子元素

标签 javascript jquery

考虑以下标记

<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 和 d Y 坐标)获取父级内部的子级。当我使用 var element = document.elementFromPoint(x, y); 时,它返回父元素。有没有办法获取子元素?

最佳答案

You could use document.elementsFromPoint instead.

它返回一个数组。

const elementsAtPoint = document.elementsFromPoint(x, y)

const numberOfElementsAtPoint = elementsAtPoint.length

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

像这样详细的一步一步:

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];

我在控制台做了一些测试,我认为这应该可行。您必须处理找不到元素的情况。

我可能会将其重写为一个函数:

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;
}

关于javascript - 通过坐标获取子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27188091/

相关文章:

javascript - 错误请求 :Error function and timeout in ajax never fired

javascript - 遍历 Json 数据存储 extjs

javascript - jQuery roundabout 没有正确对齐照片

javascript - 如何使用 tr 或 td 标签正确包装表 tr 标签外的任何内容或元素?

javascript - 没有关闭按钮的jquery弹出窗口

javascript - JavaScript 中的回文检查器 - 不知道如何调试

javascript - 语义 UI Accordion 重叠位置固定元素

javascript - jQuery,显示 <ul> 中的第一个元素

php - 调用函数并运行它

javascript - 添加类定义的不透明度不会影响 Webkit 中的元素