2012-10-22 4 views
6

Mögliche Duplizieren befinden:
Locating DOM element by absolute coordinatesWie kann ich die Liste der DOM-Elemente erhalten, die an einer bestimmten Position auf der Seite

möchte ich die Liste aller, um herauszufinden, DOM Elemente, die sich an der Position befinden, an der meine Maus geklickt wird. Ich benötige das mit Javascript oder jquery. Könnte mir jemand vorschlagen, wie ich das machen könnte?

+0

Werfen Sie einen Blick auf http://stackoverflow.com/questions/4786066/locating-dom-element-by-absolute-coordinates. –

+0

Dies ist keine genaue doppelte Frage. Der Link zu dieser anderen Antwort ist meines Erachtens keine vollständige Antwort auf die oben gestellte Frage. Sie können das oberste Element auf einer Seite nicht auf "display: none" setzen und erwarten, dass die Positionen aller übrigen Elemente auf der Seite gleich bleiben. Tatsächlich kann das Entfernen eines Div das Layout der Seite völlig verändern. Wie wird es also möglich sein, dass ein Benutzer alle Ebenen erfasst, die möglicherweise an einem bestimmten Koordinatenpaar auf der Seite vorhanden sind? – Ringo

Antwort

1

Ich würde jQuery dazu verwenden, beginnend mit dem angeklickten Element und eine Liste aller angeklickten Elemente abrufen. Fügen Sie einen Handler auf das Dokument auf der per Mausklick:

$(document).click(function(event) { 
    // event.currentTarget is the clicked element 
    // this is a list of all the parents of the clicked element 
    $(event.currentTarget).parents(); 
} 
+0

Während ich zustimme, dass dies funktioniert, kann es möglicherweise nicht alle nicht-statischen positionierten Elemente abrufen. – Ian

+0

Ich stimme ianpgall zu. Es gibt Elemente an dem Ort, die an demselben Ort angeordnet sind, basierend auf dem Z-Index und auch nicht-statisch positioniert. Wie kann ich sie abrufen? –

+0

Fair genug. Ich bin ratlos, wie man sie alle bekommt ... – pwp2

0

prüfen diese - http://jsfiddle.net/blackpla9ue/U2RCE/5/
Klicken Sie auf das Wort ‚Welt‘ es in Aktion zu sehen.

Dies funktioniert in absolute positioniert Elemente auch.

$('*').click(function(event){ 
    console.log($(this)[0].tagName + ' ' + $(this)[0].className); 
});​ 
+0

Ich sehe, dass elem3 auf elem2 ist. Wenn ich auf elem3, erhalte ich die folgenden als Ausgangs ~~~ DIV elem3 BODY HTML ~~~ Ich erkenne tut das elem2 liegen unter elem3 Sollte nicht der Ausgang sein ~~~ DIV elem3 DIV elem2 KÖRPER HTML ~~~ –

0

Sie können nicht einen Mausklick von Koordinatenposition mit Hilfe von Javascript (darüber nachdenken, was ein Sicherheitsproblem, das wäre!) Simulieren, so dass ich glaube nicht, dass Sie erreichen können, was Sie suchen zu tun. Außerdem gibt es keinen programmatischen Weg, um zu sehen, welche Ebenen an einer beliebigen x/y-Position auf einer Seite existieren können. Wenn Sie nur versuchen, etwas zu debuggen und alles an einer bestimmten x, y-Position auf der Seite sehen möchten, löschen Sie einfach jedes Element im Firebug- oder Chrome-Inspektor, wenn Sie es sich angeschaut haben und verwenden Sie den Inspektor, um zu sehen, was darunter liegt es.

Wenn Sie wirklich ein Tool brauchen, das das tut, was Sie wollen, können Sie eine Kombination aus jquery und einem Browser-Add-On verwenden. Sie könnten eine Chrome- oder Firefox-Erweiterung schreiben, die mit den Koordinaten event.x und event.y einen echten Mausklick simuliert. Sie könnten dann den oben erwähnten Vorschlag verwenden, alle Eltern des angeklickten Elements zu erfassen. Sobald Sie diese Elemente katalogisiert haben, suchen Sie das oberste übergeordnete Element des angeklickten Elements, klonen Sie es, löschen Sie alle Elemente des Klons mit Ausnahme des obersten übergeordneten Elements selbst und legen Sie den Hintergrund dieses übergeordneten Elements auf transparent fest. Ersetzen Sie nun das ursprüngliche Element im DOM durch dieses transparente geklonte Element. Auf diese Weise behalten Sie das Layout der Seite bei, und wenn Sie einen weiteren Klick simulieren, klicken Sie tatsächlich auf das oberste Element (das transparent ist) und klicken Sie auf das nächste DOM-Element (falls vorhanden) dahinter. Wiederholen Sie den obigen Vorgang, bis Sie das Body-Tag erreichen. Am Ende haben Sie eine vollständige Liste aller DOM-Elemente an einem bestimmten XY-Ort.

1

Dies macht den Job (fiddle):

$(document).click(function(e) { 
    var hitElements = getHitElements(e); 
}); 

var getHitElements = function(e) { 
    var x = e.pageX; 
    var y = e.pageY; 
    var hitElements = []; 

    $(':visible').each(function() { 
     var offset = $(this).offset(); 
     if (offset.left < x && (offset.left + $(this).outerWidth() > x) && (offset.top < y && (offset.top + $(this).outerHeight() > y))) { 
      hitElements.push($(this)); 
     } 
    }); 

    return hitElements; 
}​ 

Wenn :visible verwenden, sollten Sie sich dessen bewusst sein:

Elemente mit visibility: hidden oder Opazität: 0 sichtbar betrachtet werden, da sie immer noch Platz im Layout verbrauchen. Während Animationen, die ein Element ausblenden, wird das Element als bis zum Ende der Animation sichtbar betrachtet. Während Animationen, um ein Element anzuzeigen, wird das Element als am Anfang bei der Animation sichtbar betrachtet.

Also, basierend auf Ihrem Bedarf möchten Sie die visibility:hidden und opacity:0 Elemente ausschließen.

+0

Dank Luca, lassen Sie mich das versuchen und zurückkommen. In der Nähe was ich suche. –

+0

Gern geschehen. Probieren Sie es mit der Geige aus: http://jsfiddle.net/U2RCE/12/ –

Verwandte Themen