Chociaż poniższe informacje mogą w rzeczywistości nie odpowiadać na pytanie, ponieważ jest to pierwszy wynik wyszukiwania w Google (pracownik Google może nie zadać dokładnie tego samego pytania :), mam nadzieję, że dostarczy dodatkowych informacji.
W rzeczywistości istnieją dwa różne podejścia do uzyskania listy wszystkich elementów, nad którymi aktualnie znajduje się mysz (być może w przypadku nowszych przeglądarek):
Podejście „strukturalne” - rosnąco drzewo DOM
Jak w odpowiedzi Dhermana , można zadzwonić
var elements = document.querySelectorAll(':hover');
Jednak zakłada się, że tylko dzieci będą nakładać na swoich przodków, co zwykle ma miejsce, ale nie jest to prawdą w ogóle, szczególnie w przypadku SVG, w którym elementy w różnych gałęziach drzewa DOM mogą się nakładać.
Podejście „wizualne” - oparte na nakładaniu się „wizualnych”
Ta metoda wykorzystuje document.elementFromPoint(x, y)
do znalezienia najwyższego elementu, tymczasowego ukrycia go (ponieważ odzyskujemy go natychmiast w tym samym kontekście, przeglądarka w rzeczywistości tego nie wyrenderuje), a następnie przejdź do znajdowania drugiego najwyższego elementu ... Wygląda trochę dziwnie, ale zwraca to, czego się spodziewasz, gdy np. w drzewie występują elementy rodzeństwa, które się blokują. Proszę znaleźć ten post, aby uzyskać więcej informacji,
function allElementsFromPoint(x, y) {
var element, elements = [];
var old_visibility = [];
while (true) {
element = document.elementFromPoint(x, y);
if (!element || element === document.documentElement) {
break;
}
elements.push(element);
old_visibility.push(element.style.visibility);
element.style.visibility = 'hidden'; // Temporarily hide the element (without changing the layout)
}
for (var k = 0; k < elements.length; k++) {
elements[k].style.visibility = old_visibility[k];
}
elements.reverse();
return elements;
}
Wypróbuj oba i sprawdź ich różne zwroty.