考虑下面的标记
<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);时,它返回父元素。有没有办法获取子元素?
发布于 2014-11-28 20:01:07
这可能是由错误的标记引起的吗?在应该关闭-a标签的地方有关闭的div标签。
发布于 2019-04-26 15:16:29
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;
}https://stackoverflow.com/questions/27188091
复制相似问题