2015-02-26 14 views
8

Ich erstelle ein svg Element in Javascript und ich muss ein Attribut, das Groß-und Kleinschreibung ist: viewBox.Wie kann ich ein Attribut mit Berücksichtigung Groß-und Kleinschreibung in einem JavaScript-Element

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

Problem ist, wenn es um das DOM, zeigt das resultierende Element wie folgt das Attribut über svgElem.setAttribute("viewBox", "0,0,100,100") und fügen Sie ein: <svg viewbox="0,0,100,100"></svg>

Dies gilt, weil nicht funktioniert die viewBox ist Groß-und Kleinschreibung, es wird keine Wirkung, wenn der Brief B ist Kleinbuchstaben.

IE allows an IFlag parameter nur für Fälle wie diese, jedoch ist meine Zielgruppe auf FireFox und Chrome-Benutzer beschränkt, die kein IFlag für setAttribute haben, soweit ich finden konnte.

Gibt es eine Möglichkeit, dies ohne Verwendung von innerHTML und No-Library-Javascript zu arbeiten?

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

+0

erstellen Wie Sie das 'svg' Element erstellt haben? Bitte zeigen Sie mehr Code an. – loganfsmyth

+0

@loganfsmyth Ich habe die Elementbauweise hinzugefügt, die ich in der zweiten Zeile meiner Frage verwende – Shadow

Antwort

12

Sie benötigen ein aktuelles svg Element zu erstellen. Wenn Sie das tun:

var svg = document.createElement('svg'); 

was bekommen Sie eigentlich ist ein HTML-Element svg genannt, nicht ein SVG-Element. Der Schlüssel hier ist, dass SVG nicht wirklich ein HTML-Element ist, es ist ein fremdes Dokumentenstammverzeichnis. So erstellen Sie richtig ein SVG-Element, müssen Sie

var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); 

Insbesondere das schafft ein XML-Element zu tun, anstatt ein HTML-Element. Im Grunde Browser Fall

document.createElement('div') 

ist die gleiche wie

document.createElementNS('http://www.w3.org/1999/xhtml', 'div'); 

Das macht einen großen Unterschied, weil in HTML, Attributnamen nicht case-sensitive sind, während sie in XML, sie sind. Wenn Sie dieses 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 und kann daher nicht automatisch ausgeführt werden.

3

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

var svgns = "http://www.w3.org/2000/svg"; 
 

 
var svg = document.createElementNS(svgns, "svg"); 
 
svg.setAttribute("width", "400"); 
 
svg.setAttribute("height", "400"); 
 

 
var circle = document.createElementNS(svgns, "circle"); 
 
circle.setAttribute("cx", "300"); 
 
circle.setAttribute("cy", "300"); 
 
circle.setAttribute("r", "100"); 
 
svg.appendChild(circle); 
 

 
document.getElementById("container").appendChild(svg); 
 

 
// Now change the viewBox 
 
svg.setAttribute("viewBox", "200 200 200 200");
<div id="container"> 
 
</div>

(Hinweis: aktualisiert, um die SVG von Grund auf neu zu erstellen, wie OPs Anfrage)

+0

Die Svg, die Sie verwenden, wurde nicht über Javascript erstellt, es wurde bereits in der HTML geschrieben. Ich habe zu Beginn meiner Frage klar gesagt: "Ich erschaffe ein SVG-Element in Javascript ..." – Shadow

+0

Es sollte egal sein, wie es erstellt wurde. –

+1

Nein sollte es nicht, aber es tut leider und ich verstehe nicht den Grund dafür. – Shadow

Verwandte Themen