Embora o seguinte possa não responder de fato à pergunta, visto que este é o primeiro resultado da pesquisa no Google (o googler pode não fazer exatamente a mesma pergunta :), espero que ele forneça alguma entrada extra.
Na verdade, existem duas abordagens diferentes para obter uma lista de todos os elementos sobre os quais o mouse está atualmente (para navegadores mais recentes, talvez):
A abordagem "estrutural" - árvore DOM ascendente
Como na resposta do dherman, pode-se ligar
var elements = document.querySelectorAll(':hover');
No entanto, isso pressupõe que apenas os filhos irão sobrepor seus ancestrais, o que geralmente é o caso, mas não é verdade em geral, especialmente ao lidar com SVG, onde elementos em diferentes ramos da árvore DOM podem se sobrepor.
A abordagem "visual" - com base na sobreposição "visual"
Este método usa document.elementFromPoint(x, y)
para encontrar o elemento superior, ocultá-lo temporariamente (já que o recuperamos imediatamente no mesmo contexto, o navegador não irá renderizá-lo de fato), então vá para encontrar o segundo elemento superior ... Parece um pouco estranho, mas ele retorna o que você espera quando há, por exemplo, elementos irmãos em uma árvore obstruindo um ao outro. Encontre esta postagem para mais detalhes,
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;
}
Experimente ambos e verifique seus diferentes retornos.