2016-07-20 13 views
0

Ich fragte mich, was der Unterschied zwischen den e.target.parentNode und e.path[1] ist? Und wenn es gibt, was ist besser & warum?Was ist der Unterschied zwischen e.target.parentNode und e.path [1]

Hier ist, wie die sturcture wie folgt aussieht:

enter image description here

Hier ist das Konsolenprotokoll:

console.log("button clicked!!!",e.target.parentNode, e.path[1], e.path[2]) 

enter image description here

Hier wird der Klick console.log(e)

enter image description here

NB: Klicken Sie Ereignis auf die Schaltfläche Element

Danke

+2

Bitte senden Sie Markup als * Markup *, nicht ein Bild. –

+0

Nun, ich glaube 'Pfad' ist nicht in jedem aktuellen Browser verfügbar. – epascarello

+0

Was ist 'e'? Bitte zeigen Sie uns Ihren Code. – Bergi

Antwort

2

Experimentell auf der einen Browser die ich gefunden habe, die es unterstützt, e.path[1] und e.target.parentNode auf dasselbe Element beziehen. Zum Beispiel gibt es keinen Unterschied.

Aber beachten Sie, dass Event#path nicht gut unterstützt wird (während Event#target und Node#parentNode sind), und soweit ich sagen kann, es ist (noch?) Standardisiert: Es erscheint nicht in der DOM4 Event interface, zum Beispiel. Es ist auch nicht in der WHAT-WG Event interface, aber diese Spezifikation erwähnt eine Methode, composedPath, die die gleiche Art von Informationen zurückgibt.

Chrom   51 scheint Event#path zu unterstützen; Firefox   47 nicht. Weder unterstützt composedPath.

können Sie sehen, ob Ihr aktueller Browser hier unterstützt:

document.getElementById("outer").addEventListener("click", function(e) { 
 
    var hasPath = !!e.path; 
 
    var hasComposePath = !!e.composedPath; 
 
    console.log("Has `path`? " + (hasPath ? "Yes" : "No")); 
 
    console.log("Has `composedPath()`? " + (hasComposePath ? "Yes" : "No")); 
 
    if (hasPath) { 
 
    console.log("e.path[1] === e.target.parentNode? " + (e.path[1] === e.target.parentNode)); 
 
    } 
 
});
<div id="outer"> 
 
    <div id="inner"> 
 
    Click me 
 
    </div> 
 
</div>

+0

Es scheint überhaupt nicht dokumentiert zu sein * überall. Ich konnte im [aktuellen DOM-Spezifikationsentwurf] (https://dom.spec.whatwg.org/) auch keine Erwähnung finden. Die einzige Erwähnung findet sich in den [polymer docs] (https://www.polymer-project.org/1.0/docs/devguide/events) – Bergi

+0

@Bergi: Es wird von Chrome 51 unterstützt. Ich habe keine Spezifikation dafür gefunden doch ist es vielleicht noch nicht in einem (noch?). –

+0

Die einzigen Dinge, die ich gefunden habe, sind ['composedPath()'] (https://dom.spec.whatwg.org/#dom-event-composedpath) und ['deepPath()'] (https: //www.w3 .org/TR/Schatten-Dom/# Widl-Event-DeepPath-Sequenz-EventTarget) Methoden. Sieht sehr experimentell aus. – Bergi

Verwandte Themen