2015-06-15 3 views
9

Wenn I cloneNode() auf ein Element mit dem Namen feGaussianBlur nennen, die das Attribut hat stdDeviation, Internetexplorer (10 und 11) setzt immer den Wert zu 1.72443e+009. HiercloneNode() ändert Attributwert im Internetexplorer 10 und 11

ist ein Vier-Liner, der das Problem veranschaulicht: https://jsfiddle.net/kytbh4Ls/6/

Wenn Sie den Namen des Elements zu ändern, einen anderen Attributnamen verwenden oder die Geige auf einem anderen Browser (Chrome, Firefox) läuft, läuft alles wie erwartet . Die Verwendung eines anderen Attributwerts ändert nichts.

Was könnte der Grund für dieses wirklich seltsame Verhalten sein? Und kann man etwas dagegen tun?

Hier eine modifizierte Geige mit jQuery clone() statt cloneNode() leider das gleiche Ergebnis produzieren: https://jsfiddle.net/kytbh4Ls/7/

+1

Klingt wie ein Fehler. Melden Sie es Microsoft. http://blog.reybango.com/2013/02/28/submitting-an-internet-explorer-bug-to-microsoft/ –

+0

Sie meinen, unabhängig von dem Wert, den es zuvor hatte? – Bergi

Antwort

1

Dies ist ein klarer Fehler in Internet Explorer ist. Während es wahr ist, dass Internet Explorer die stdDeviation anstelle von stdDeviationX und stdDeviationY verwendet, hat die cloneNode() Funktion kein Geschäft mit den Attributen herumzuspielen. Es sollte einen Klon des Knotens zurückgeben, keinen Knoten mit geänderten Attributen.

Sie sollten dies dem Internet Explorer-Entwicklerteam melden (falls Sie Zeit dazu haben). Gegenwärtig können Sie wahrscheinlich nur eine manuelle Problemumgehung implementieren.

0

Das Problem ist, dass der IE nicht das StdDeviation Attribut nicht verwendet. Stattdessen verwendet es stdDeviationX und stdDeviationY.

diese Geige ansehen ... FIDDLE

Hier ist die Microsoft page for feGaussianBlur

var element = document.createElementNS('http://www.w3.org/2000/svg', "feGaussianBlur"); 
element.setAttribute('stdDeviationX', 5); 
element.setAttribute('stdDeviationY', 5); 

var clonedElement = element.cloneNode(); 

alert("Original:" + element.getAttribute("stdDeviationX") + ", Cloned:" + clonedElement.getAttribute("stdDeviationX")); 
+1

Danke, aber stdDeviationX und stdDeviationY funktionieren nicht in SVGs auf InternetExplorer. Das korrekte Attribut ist stdDeviation. Hier ist ein sehr einfaches SVG, das die Attribute vergleicht: https://jsfiddle.net/1vkn22bp/ Wie Sie sehen können, gibt nur stdDeviation den gewünschten Effekt. Auch wenn stdDeviation nicht unterstützt wird, gibt es keinen Grund für den Browser, den Attributwert beim Klonen zu ändern. – Waruyama

+1

Notorious ist richtig. IE verwendet stdDeviationX und stdDeviationY. Was hält Sie davon ab, die stdDeviation für das geklonte Element wie clonedElement.setAttribute ("stdDeviation", 5) zu setzen? –

+0

Ich weiß nicht, welche Version IE Sie testen, aber in IE11 'stdDeviationX' und' stdDeviationY' funktioniert nicht, während 'stdDeviation' den Effekt gibt aber bricht beim Klonen. – oBusk

Verwandte Themen