2015-06-15 12 views
9

Kiedy zadzwonić cloneNode() na element o nazwie feGaussianBlur który posiada atrybut stdDeviation, InternetExplorer (10 i 11) zawsze konwertuje wartość 1.72443e+009.cloneNode() zmienia wartość atrybutu w InternetExplorer 10 i 11

Oto cztery-liner, który ilustruje problem: https://jsfiddle.net/kytbh4Ls/6/

Jeśli zmienisz nazwę elementu, należy użyć innej nazwy atrybutu lub uruchom skrzypce na dowolnej innej przeglądarki (Chrome, Firefox), wszystko działa zgodnie z oczekiwaniami . Używanie innej wartości atrybutu niczego nie zmieni.

Co może być przyczyną tego naprawdę dziwnego zachowania? I czy jest coś, co można z tym zrobić?

Tutaj zmodyfikowanej skrzypce przy użyciu jQuery na clone() zamiast cloneNode() niestety do tego samego rezultatu: https://jsfiddle.net/kytbh4Ls/7/

+1

Brzmi jak błąd. Zgłoś to firmie Microsoft. http://blog.reybango.com/2013/02/28/submitting-an-internet-explorer-bug-to-microsoft/ –

+0

Masz na myśli, niezależnie od wartości, którą wcześniej posiadał? – Bergi

Odpowiedz

1

Jest to wyraźny błąd w przeglądarce Internet Explorer. Choć prawdą jest, że Internet Explorer używa nazwy stdDeviation zamiast stdDeviationX i stdDeviationY, funkcja nie zajmuje się problemami z atrybutami. Powinien zwrócić klon węzła, a nie węzeł ze zmienionymi atrybutami.

Powinieneś zgłosić to do zespołu programistycznego Internet Explorer (jeśli masz na to czas). Obecnie wszystko, co prawdopodobnie możesz zrobić, to wdrożyć obejście ręczne.

0

Problem polega na tym, że IE nie użyć atrybutu stdDeviation. Zamiast tego używa stdDeviationX i stdDeviationY.

Zobacz ten skrzypce ... FIDDLE

Oto 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

Dzięki, ale stdDeviationX i stdDeviationY nie działają w SVG na InternetExplorer. Poprawnym atrybutem jest stdDeviation. Oto bardzo prosty SVG, który porównuje atrybuty: https://jsfiddle.net/1vkn22bp/ Jak widać, tylko stdDeviation daje pożądany efekt. Ponadto, nawet jeśli stdDeviation nie był obsługiwany, nie ma powodu, aby przeglądarka zmieniała wartość atrybutu podczas klonowania. – Waruyama

+1

Notorious ma rację. IE używa stdDeviationX i stdDeviationY. Co powstrzymuje cię przed ustawieniem stdDeviation na sklonowanym elemencie, takim jak clonedElement.setAttribute ("stdDeviation", 5); –

+0

Nie wiem, w której wersji IE testujesz, ale w IE11 'stdDeviationX' i' stdDeviationY' nie działa, podczas gdy 'stdDeviation' daje efekt, ale znika podczas klonowania. – oBusk

Powiązane problemy