Effizientes Finden von DOM-Elementen, die über einem angegebenen DOM-Element angezeigt werden

8

Wie kann ich effizient alle DOM-Elemente finden, die sich über einem bestimmten Abfrageelement befinden?

Das heißt, ich möchte eine Javascript-Funktion, die, wenn ich einen Verweis auf ein DOM-Element übergebe, ein Array aller DOM-Elemente zurückgibt, die nicht null mit dem Eingabeelement überlappen und darüber visuell erscheinen. Mein spezifisches Ziel ist es, jene Elemente zu finden, die Elemente darunter visuell blockieren können.

Der Kontext ist einer, in dem ich kein fortgeschrittenes Wissen über die Webseite, das Abfrageelement oder vieles andere mehr habe. Elemente können aus verschiedenen Gründen über anderen erscheinen.

Ich kann das natürlich durch eine gründliche Suche im DOM tun, aber das ist sehr ineffizient und nicht praktisch, wenn der DOM-Baum groß wird. Ich könnte auch das neuere elementFromPoint verwenden, um Positionen innerhalb des Abfrageelements zu erfassen, um sicherzustellen, dass es tatsächlich oben steht, aber das scheint ziemlich ineffizient zu sein.

Irgendwelche Ideen, wie man das besser macht?

Danke!

    
user1586808 01.11.2012, 18:54
quelle

2 Antworten

2

Ich kann mir keinen einfacheren Weg vorstellen als mit elementFromPoint. Sie scheinen es nicht benutzen zu wollen, können aber ein konsistentes Ergebnis erzielen. Wenn es mehrschichtige Elemente gibt, sollten Sie Ihren Code anpassen, um bereits gegriffene Elemente zu verschieben oder unsichtbar zu machen und die Funktion aufrufen, um neue Datenelemente zu erhalten.

Für die Grundidee:

%Vor%

jsFiddle

    
A. Wolff 01.11.2012, 20:48
quelle
0

Es ist bedauerlich, aber es gibt keine Möglichkeit, eine Lösung zu finden, die nicht durch alle DOM-Elemente iteriert, weil Sie beliebige Elemente auf dem Bildschirm durch CSS-Regeln einfügen können.

Sie können es am besten über alle DOM-Elemente iterieren, um einen Hit-Test zu machen.

Wenn ich dies tun müsste, würde ich auf jQuery zurückgreifen, eine weit verbreitete Cross-Browser-API, die ständig verbessert wird.

Sehen Sie sich Ссылка an, Ссылка und Ссылка

Wenn Leistung sehr wichtig ist, können Sie einen Faktor gewinnen, indem Sie in ihre Implementierung eintauchen und sie für Ihren speziellen Fall verbessern, aber bedenken Sie, dass die Komplexität nicht unter O (Anzahl der DOM-Elemente) fällt.

    
Samuel Rossille 01.11.2012 19:56
quelle

Tags und Links