親要素をdisplay:none;にしたsvgの色をjQueryで動的に切り替えています。
この要素をjQueryで表示したり、非表示にしたり切り替えを行っています。
html
1<!--SVG--> 2<div class="parent" style="display:none;"> 3<object id="canvas" class="productpic" style="display:none;" data="hoge.svg" type="image/svg+xml"></object> 4</div> 5<!--色選択ボタン--> 6<div class="colorbtn" data-color="0">RED</div> 7<div class="colorbtn" data-color="1">BLUE</div> 8<div class="colorbtn" data-color="2">YELLOW</div> 9<!--表示切替ボタン--> 10<div id="on">表示</div> 11<div id="off">非表示</div>
javascript
1var colordata = new Object(); 2colordata[0] = 'rgba(255,0,0,255)'; 3colordata[1] = 'rgba(0,0,255,255)'; 4colordata[2] = 'rgba(255,255,0,255)'; 5$(function(){ 6 $(document).on('click', '#on', function(){ 7 $('.parent').fadeIn(400); 8 }); 9 $(document).on('click', '#off', function(){ 10 $('.parent').fadeOut(400); 11 }); 12 $(document).on('click', '.colorbtn', function(){ 13 var colorid = $(this).data('color'); 14 var svgobj = document.getElementById('canvas').contentDocument; 15 var $svg = $(svgobj).find('svg'); 16 $target = $svg.find('path'); 17 $target.css('fill', colordata[colorid]); 18});
非表示の状態で色を切り替え、その後この要素を表示した時、ブラウザによって挙動が異なり困っています。
Firefox、Edgeでは上記操作を行った時、色が切り替わった状態で表示されます。(意図通りの挙動)
一方、Chromeでは上記操作を行った時、色が切り替わっていない状態で表示されます。
ただし、Chromeの場合でも一度表示を行った後、再度非表示にしてから色の切り替えを行った場合には、改めて表示した際、色が切り替わった状態で表示されます。(意図通りの挙動)
原因が全くわからず、どなたかお分かりになる方がいらっしゃいましたら、教えて頂けると大変助かります。
<追記>
どうやら、最初、非表示の際はdocument.getElementById('canvas').contentDocumentがnullとなってしまい、一度表示下後に非表示にした際は、しっかりと#documentが取得出来ている様です。
ちなみに、最初の非表示の際でもdocument.getElementById('canvas')は正しく取得出来ているので、.contentDocumentの挙動でブラウザによって違いがあるということでしょうか。。。