2017-09-27 11 views
0

svg要素でjavascriptのclassListを使用できない問題が発生しています。MS-EdgeでclassListが動作しない

私はこのコードのシンプルな作品で問題を複製さ:

HTML

<svg viewBox="0 0 100 100"> 
<circle id="circle" r="40" cx="50" cy="50"></circle> 
</svg> 

CSS

.red{ 
    fill: red; 
} 

javascriptの

document.getElementById("circle").classList += "red"; 

JS-フィドル:https://jsfiddle.net/gqckv029/

私は、Microsoftはそれが修正されたと述べているインターネット上でこのチケットを見つけました。 https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/1173756/。それは私には当てはまらないようです。クラス追加

が好ましいが、代わりにSVG要素のジャバスクリプト有する要素属性(のようなこの場合に記入)を変更するための回避策も答えとして十分です。

最終的なメモ:現実の状況では、背景色ではなくCSSアニメーションをトリガーしようとしています。

+1

classListは文字列ではありません。あなたは 'document.getElementById(" circle ").classList.add( 'red');' ....すべてのブラウザ(Edgeだけではありません) –

+0

修正、あなたのコードは他のブラウザでも動作し、 'document.getElementById(" circle " ).classname + = "red"; ' - 要素がすでに' class = "blue" 'を持っていれば' class = "bluered" '--addを使うと' class = "blue red "' –

+0

@Jaromanda X素晴らしい!それは実際問題を解決するようです。私は今からclassList.add()を使ってjavascriptを改善していきます。正式な回答としてそれをドロップして、私はそれを受け入れるでしょう。 – RMo

答えて

2

エレメントのクラス属性がelement.classList += "red"が効果的に同じである、少なくとも2つの一般的な方法(少なくとも今のエッジ以外の)他のブラウザで

element.className // a string 

又は

element.classList // a "DOMTokenList" 

を使用してアクセスすることができますelement.className += "red"要素にまだクラスがない場合は問題ありません

ただし、

<element class="blue"> 

、その後classList += "red"className += "red"両方が

classList.addメソッドを使用して
<element class="bluered"> 

になりますでの作業になりclassList.removeとclassList.toggleは、もありますあなたは

<element class="blue"> 
element.classList.add('red') 
<element class="blue red"> 

欲しいものはおそらくですクラスは簡単です

関連する問題