2016-03-22 4 views
1

Ich habe einige Markierungen mit benutzerdefinierten Symbolen (DivIcons) auf meiner Karte.Zugriff auf das HTMLE-Element eines Markersymbols in Leaflet

Wenn ich auf einen Marker klicke, möchte ich auf das HTMLElement des Icons zugreifen, um Klassen hinzuzufügen oder zu entfernen.

Die einzige Möglichkeit, auf das HTMLElement zuzugreifen, ist die _icon Eigenschaft. Ich verstehe, dass es ein Privateigentum ist, aber ich kann keinen anderen Weg finden.

Die options.icon gibt mir das Symbolobjekt zurück (das von vielen Markern verwendet wird), nicht das konkrete HTMLElement für diesen Marker.

Kennen Sie einen sicheren Weg, um auf das HTMLElement eines Markers zuzugreifen?

+0

sehen keine Probleme '_icon' Eigenschaft. Warum zögerst du es zu benutzen? –

+0

@LazarevAlexandr, sieht es leider wie ein privates Feld aus (mit _ beginnen). – Neekobus

Antwort

1

Leider hat JavaScript keine systemeigene Unterstützung für private Eigenschaften. Es gibt jedoch mehrere Techniken, um sie zu emulieren: eine, die Präfixe verwendet, die anderen Verschlüsse. Die Verwendung eines Unterstrichpräfixes ist nur eine Codierungskonvention und wird nicht von der Sprache erzwungen: Es gibt nichts, was einen Benutzer daran hindert, direkt auf eine Eigenschaft zuzugreifen, die "privat" sein soll. Diese Methode ist nicht sicher und dient nur als Richtlinie für den Clientcode. Ich glaube also nicht, dass ein Schaden durch Zugriff auf _icon Eigentum verursacht werden kann.

Wenn eine Eigenschaft privat sein soll, ohne dass von außen darauf zugegriffen werden kann, wird sie normalerweise als lokale Variable eines bestimmten Umfangs festgelegt, ohne an den Kontext gebunden zu sein. Auf diese Art von Variablen kann von außen nur mit Hilfe von Closures zugegriffen werden, und wenn sie nicht definiert sind, kann auf die Variable nicht zugegriffen werden.

+1

Ich weiß, es ist nur eine Konvention, aber da es keine Dokumentation über diese Eigenschaft gibt, wollte ich sicher sein, dass diese Eigenschaft nicht in einer nächsten Version verschwinden wird. Übrigens verwende ich es jetzt und es ist genau das, was ich brauche. – Neekobus

1

Ich habe einen Weg gefunden, dokumentierte sie zuzugreifen:

Da ich in einem „Klick“ -Ereignis bin ich das Htmlelement der Markierung mit event.originalEvent.target in dem Rückruf zugreifen kann.

http://leafletjs.com/reference.html#event-objects

+0

Es bezieht sich immer noch auf eine private Eigenschaft: 'e.target._icon'. :) –

+0

Nein! 'event.originalEvent.target'! – Neekobus

+0

Oh, Entschuldigung. Gut gemacht! –

Verwandte Themen