Aşağıdakiler soruyu gerçekten yanıtlamasa da, bu, googling'in ilk sonucu olduğundan (Google çalışanı tam olarak aynı soruyu sormayabilir :), umarım fazladan girdi sağlar.
Farenin şu anda üzerinde olduğu tüm öğelerin bir listesini almak için aslında iki farklı yaklaşım vardır (belki daha yeni tarayıcılar için):
"Yapısal" yaklaşım - Artan DOM ağacı
Olduğu gibi dherman cevabı , tek çağırabilirsiniz
var elements = document.querySelectorAll(':hover');
Bununla birlikte, bu, yalnızca çocukların atalarının üst üste geleceğini varsayar, bu genellikle böyledir, ancak genel olarak doğru değildir, özellikle DOM ağacının farklı dallarındaki öğelerin birbiriyle çakışabileceği SVG ile uğraşırken.
"Görsel" yaklaşım - "Görsel" örtüşmeye dayalı
Bu yöntem document.elementFromPoint(x, y)
, en üstteki öğeyi bulmak, geçici olarak gizlemek için kullanır (aynı bağlamda hemen kurtardığımız için, tarayıcı bunu gerçekten oluşturmayacaktır), ardından en üstteki ikinci öğeyi bulmaya devam eder ... Biraz karmaşık görünüyor, ancak örneğin, bir ağaçta birbirini tıkayan kardeş öğeler olduğunda beklediğiniz şeyi döndürür. Daha fazla ayrıntı için lütfen bu gönderiyi bulun ,
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;
}
İkisini de deneyin ve farklı getirilerini kontrol edin.