แม้ว่าสิ่งต่อไปนี้อาจไม่ได้ตอบคำถามจริงๆเนื่องจากนี่เป็นผลลัพธ์แรกของการใช้ googling (googler อาจไม่ได้ถามคำถามเดียวกันทั้งหมด :) หวังว่าจะให้ข้อมูลเพิ่มเติม
มีสองวิธีที่แตกต่างกันในการรับรายการองค์ประกอบทั้งหมดที่เมาส์ใช้งานอยู่ในขณะนี้ (สำหรับเบราว์เซอร์รุ่นใหม่อาจ):
แนวทาง "โครงสร้าง" - โครงสร้าง DOM จากน้อยไปมาก
ในคำตอบของเดอร์แมนเราสามารถโทร
var elements = document.querySelectorAll(':hover');
อย่างไรก็ตามสิ่งนี้ถือว่ามีเพียงเด็ก ๆ เท่านั้นที่จะซ้อนทับบรรพบุรุษของพวกเขาซึ่งโดยปกติจะเป็นเช่นนั้น แต่ไม่เป็นความจริงโดยทั่วไปโดยเฉพาะอย่างยิ่งเมื่อจัดการกับ SVG ที่องค์ประกอบในกิ่งก้านต่างๆของต้นไม้ DOM อาจทับซ้อนกัน
แนวทาง "ภาพ" - ขึ้นอยู่กับ "ภาพ" ที่ทับซ้อนกัน
วิธีนี้ใช้document.elementFromPoint(x, y)
เพื่อค้นหาองค์ประกอบที่อยู่บนสุดซ่อนไว้ชั่วคราว (เนื่องจากเรากู้คืนทันทีในบริบทเดียวกันเบราว์เซอร์จะไม่แสดงผลสิ่งนี้จริง ๆ ) จากนั้นไปหาองค์ประกอบที่อยู่บนสุดอันดับที่สอง ... ดูเหมือนแฮ็คเล็กน้อย แต่ มันจะส่งคืนสิ่งที่คุณคาดหวังเมื่อมีเช่นองค์ประกอบพี่น้องในต้นไม้ที่มารวมกัน โปรดดูโพสต์นี้เพื่อดูรายละเอียดเพิ่มเติม
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;
}
ลองทั้งสองอย่างและตรวจสอบผลตอบแทนที่แตกต่างกัน