2011-03-05 55 views
2

在JavaScript + DOM中,如果鼠標事件發生在容器上但位於所有封閉元素下方,如何有效地找到直接位於光標上方的封閉元素(相同x,不同y) ?通過部分座標查找DOM元素

顯然getElementFromPoint不幫我在這裏(即使可用),因爲我不會逐個像素。如果有很多元素,找到容器中所有元素的位置也可能相當緩慢。

回答

0

如果使用這樣的嵌套HTML標記,則可以繞過使用X,Y座標並導航DOM的需要。

<ul id="theparent" class="aparent"> 
    <li id="thechild" class="achild">Something</li> 
    <li id="anotherchild" class="achild">Something</li> 
</ul> 
<ul id="anotherparent" class="aparent> 
    <div id="yetanotherchild" class="achild">Something else</li> 
</ul> 

您可以使用jQuery綁定到每個achild div的onclick事件,然後找到其直接父:

$(".achild").bind("click", function() { 
    $(this).parent().trigger("childclicked"); 
}); 

然後你就可以做出點什麼父:

$(".aparent").bind("childclicked", function() { 
    console.log("a child of mine was clicked"); 
}); 
+0

好吧,但我需要處理click * outside *子元素。想象一下,在你的例子中,父母的身高高於孩子的身高,並且同一'行'上可能有多個孩子。 – 2011-03-05 09:22:19

+0

您是否真的需要點擊父元素的X,Y座標,或者只是想要觸發一個事件?你爲什麼不綁定到父級的onclick處理程序?我認爲你需要發佈一些HTML和JS來澄清。 – stef 2011-03-05 10:14:07