Sebbene quanto segue potrebbe non rispondere effettivamente alla domanda, poiché questo è il primo risultato del googling (il googler potrebbe non porre esattamente la stessa domanda :), spero che fornisca qualche input extra.
In realtà esistono due diversi approcci per ottenere un elenco di tutti gli elementi su cui si trova attualmente il mouse (forse per i browser più recenti):
L'approccio "strutturale" - Albero DOM ascendente
Come nella risposta di Dherman, si può chiamare
var elements = document.querySelectorAll(':hover');
Tuttavia, questo presuppone che solo i bambini si sovrapporranno ai loro antenati, il che di solito è il caso, ma non è vero in generale, specialmente quando si ha a che fare con SVG dove elementi in diversi rami dell'albero DOM possono sovrapporsi l'un l'altro.
L'approccio "visivo" - Basato sulla sovrapposizione "visiva"
Questo metodo utilizza document.elementFromPoint(x, y)
per trovare l'elemento più in alto, nasconderlo temporaneamente (poiché lo recuperiamo immediatamente nello stesso contesto, il browser non lo renderà effettivamente), quindi prosegui per trovare il secondo elemento più in alto ... Sembra un po 'hacky, ma restituisce ciò che ci si aspetta quando, ad esempio, elementi fratelli in un albero si occludono a vicenda. Si prega di trovare questo post per maggiori dettagli,
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;
}
Prova entrambi e controlla i loro diversi rendimenti.