Wie kann ich ein Attribut mit einem Namen unter Berücksichtigung der Groß- / Kleinschreibung in einem durch JavaScript generierten Element setzen?

9

Ich erstelle ein svg Element in Javascript und muss ein Attribut setzen, das die Groß- / Kleinschreibung beachtet: viewBox .

Das Element wird wie folgt erstellt: var svgElem = document.createElement('svg');

Problem ist, wenn dieses Attribut über svgElem.setAttribute("viewBox", "0,0,100,100") gesetzt und an das DOM angehängt wird, zeigt das resultierende Element folgendes: <svg viewbox="0,0,100,100"></svg>

Dies funktioniert nicht, da viewBox Groß- und Kleinschreibung unterscheidet. Es wird keine Auswirkung haben, wenn der Buchstabe B klein geschrieben ist.

IE erlaubt einen IFlag-Parameter nur für Fälle wie Diese sind jedoch auf FireFox- und Chrome-Benutzer beschränkt, für die kein IFlag für setAttribute verfügbar ist.

Gibt es eine Möglichkeit, dies ohne die Verwendung von innerHTML und JavaScript zu machen?

EDIT: Ich habe auch versucht, Punktnotation ohne Erfolg svg.viewBox = "0,0,100,100"

zu verwenden     
Shadow 26.02.2015, 04:44
quelle

3 Antworten

13

Sie müssen ein tatsächliches svg -Element erstellen. Wenn du es tust:

%Vor%

Was Sie tatsächlich erhalten, ist ein HTML-Element namens svg , kein SVG-Element. Der Schlüssel hier ist, dass SVG nicht wirklich ein HTML-Element ist, es ist ein fremdes Dokumentenstammverzeichnis. Um ein SVG-Element richtig zu erstellen, müssen Sie

ausführen %Vor%

Dies erzeugt insbesondere ein XML-Element anstelle eines HTML-Elements. Im einfachen Browserfall

%Vor%

ist dasselbe wie

%Vor%

Das macht einen großen Unterschied, denn in HTML wird bei Attributnamen nicht zwischen Groß- und Kleinschreibung unterschieden, während dies bei XML der Fall ist. Wenn Sie diese SVG an das DOM anhängen, verhält es sich auch wie ein div , da es sich um ein unbekanntes HTML-Element und nicht um ein echtes SVG-Element handelt. Ein HTML-Parser ist schlau genug, um einen fremden Wurzelknoten anstelle eines unbekannten HTML-Elements zu erstellen, aber Ihr Code ist programmatisch, so dass er nicht automatisch ausgeführt werden kann.

    
loganfsmyth 26.02.2015, 05:16
quelle
3

Es funktioniert gut für mich in Chrome und Firefox.

%Vor% %Vor%

(Hinweis: aktualisiert, um das SVG von Grund auf neu zu erstellen, je nach OP-Anfrage)

    
Paul LeBeau 26.02.2015 04:59
quelle
0

Sie sollten den Wert mit createAttribute erstellen, siehe Festlegen des Attributwerts eines Elements in CamelCase mithilfe von a Richtlinie

%Vor%     
Milagros 01.05.2017 04:02
quelle

Tags und Links