Ich schreibe ein Teil der Infrastruktur, die anders als HTML-Elemente im Vergleich zu SVG-Elementen angewendet werden muss. Wie kann ich bei einem DOM-Knoten erkennen, ob es sich um ein SVG- oder HTML-Element handelt?Wie erkenne ich, ob ein DOM-Element HTML oder SVG ist?
Antwort
Sie können so etwas wie das folgende versuchen:
if(document.getElementById("el") instanceof SVGElement) {
console.log("It's an SVG element");
}
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="300" height="300">
<g id="firstGroup">
<rect id="el" width="100" height="50" x="40" y="20" fill="blue" />
<text x="40" y="100">This is a basic SVG document!</text>
</g>
</svg>
Beachten Sie, dass das <svg>
Element selbst ist eigentlich ein HTML-Element enthältSVG
Elemente - was bedeutet, dass, vielleicht überraschend, die <svg>
HTML-Element ist nicht ein SVG
Element, daher:
console.log(document.createElement("svg") instanceof SVGElement)) // => false
Das fühlt sich righter an. –
Danke @BillCriswell, ich denke ja! –
Ich habe if (element.getBBox) {um zu überprüfen, ob das Element eine getBBox-Methode hat. Bestimmte Funktionen/Methoden existieren nur für SVG-Elemente. –
Ich bin mir nicht sicher, wie Cross-Browser kompatibel ist, aber ich stocherte durch die DOM-Eigenschaften und sah eine ownerSVGElement
, die vielversprechend scheint? Hier
geht, was ich Herumspielen mit: http://jsbin.com/uMIronal/4/edit?html,js,output
Beachten Sie, dass dieser Ansatz nicht funktioniert, wenn das SVG-Element nicht bereits einem Dokument hinzugefügt wurde, z. B. "document.createElementNS (" http://www.w3.org/2000/svg "," circle "). ownerSVGElement' wird 'null', also ist 'instanceof' auf diese Weise zuverlässiger und [führt auch zu besseren Ergebnissen (https://jsperf.com/check-if-svg-element/1). –
- 1. Wie erkenne ich, ob window.location fehlgeschlagen ist?
- 2. Wie erkenne ich, ob ich MATLAB oder Octave leite?
- 3. DOMElement ersetzen HTML-Wert
- 4. Wie erkenne ich, ob eine Remote-Webseite verfügbar ist?
- 5. Wie erkenne ich, ob eine Schriftart eine Symbolschrift ist?
- 6. Wie erkenne ich, ob meine App Sandboxed ist?
- 7. Wie erkenne ich, ob ein Funke Datenrahmen eine Spalte
- 8. Node.js - Wie erkenne ich, ob ein Knotenscript läuft?
- 9. Wie bekomme ich HTML Code von DOMElement Knoten?
- 10. Wie erkenne ich, ob ein bestimmter TCP-Stream, der über boost :: asio_stream_async verbunden ist, geschlossen ist?
- 11. Wie erkenne ich ein Palindrom in C?
- 12. C# Wie erkenne ich ein Gastkonto?
- 13. Wie erkenne ich, ob eine gezeichnete Linie ein schwarzes Pixel in einem Bild schneidet oder berührt?
- 14. Wie erkenne ich, ob meine Android App mit einem Cromecast Audio oder Video verbunden ist?
- 15. Wie erkenne ich in einem digitalen Foto, ob ein Berg von Wolken verdeckt ist?
- 16. Wie verwende ich externe SVG in HTML?
- 17. Wie erkenne ich, ob ich iPhone 2G, 3G, 3GS
- 18. Wie erkenne ich, ob ein Berührungsereignis in einem EditText gelandet ist?
- 19. Wie kann ich erkennen, ob ein Bild ein PNG- oder APNG-Format ist?
- 20. Wie erkenne ich, ob eine Grafik gedithert wird?
- 21. Wie erkenne ich, ob eine Firebase-Speicherdatei existiert?
- 22. Android 2.2 - Wie erkenne ich, ob ich auf der SD-Karte installiert bin oder nicht?
- 23. Wie erkenne ich erkannte Fehler?
- 24. Wie erkenne ich, ob das Dateisystem Groß- und Kleinschreibung unterscheidet?
- 25. Wie erkenne ich iframe resize?
- 26. Wie ein DOMNodeList-Objekt und ein DOMElement-Objekt echo?
- 27. Wie erkenne ich, ob eine Tabelle existiert (die keine Klasse oder ID hat)
- 28. Chef: Wie überprüfe ich, ob ein Service installiert ist?
- 29. Javascript virtuelle Tastatur: Wie erkenne ich Textfelder?
- 30. Wie überprüft man, ob ein div vorhanden ist oder nicht?
nicht darüber einig, dass dies ein Codebeispiel muss das Problem zu erklären, ist die Frage aus dem Text klar. – David
@David ist nicht nur der nahe Grund absurd, aber Sie werden sehen, dass die Frage eine solide Antwort bekam, die anderen innerhalb von 30 Minuten von Nutzen sein würde. Ich habe keine Ahnung, was die Jungs hier dachten. –