2017-07-17 3 views
0

ユーザーにスタイルを動的に設定させようとしていますが、特定のスタイルの値も取得したいと考えています。たとえば、ユーザーがH1要素の色を「オレンジ」に設定しているかどうかを確認したいとします。AngularJSを使用してスタイルを動的に設定するときにスタイルプロパティにアクセスする

マイHTML

<body ng-controller="mainController">  
    <h1 id="myH1">Hello World!</h1> 

    <textarea ng-model="outputCss"></textarea> 

    <style media="screen" type="text/css"> 
     {{outputCss}} 
    </style> 
</body> 

私のJavascript、例ユーザー入力

var myH1Style = document.getElementById('myH1').style; 

$scope.$watch('outputCss', function(newValue, oldValue){ 
    if (myH1Style.color == "orange"){ 
     alert("Nice work!"); 
    } 
    console.log(myH1Style.color); 
}); 

メインコントローラ

#myH1 { 
color: orange; 
} 

h1 { 
font-weight: 900; 
} 

問題は、条件が満たされず、コンソールログが常に空であることです。このメソッドを使用して追加されたCSSプロパティを表示するにはどうすればよいですか?

答えて

1

あなたの質問は基本的に2つの質問される:ここで答えはそれが醜いということです

  1. How do I compare colors?(悲しいことに、あなたが戻って取得値は、それが適用されたフォーマットで、おそらくないので、あなたは可能性があります"orange"または"rgb(255, 165, 0)"または"rgb(255,165,0)"または"rgba(255, 165, 0, 1)" ...)

  2. How do I get the styles as applied by CSS rules?

を取得

これらの質問に対する回答の組み合わせがあなたの質問に答えます。基本的に、あなたは計算スタイルを取得するには(古いIE上またはelement.currentStylegetComputedStyle(element)を使用する必要があります(.styleのみお直接要素に適用されるスタイルを提供します)、そしてあなたが戻って取得値は、ウェルフォーマットでないかもしれませんそれがスタイルシートにあることを示しています(しかし、一部のブラウザでは、おそらく...醜いかもしれません)。


サイドノート:ハードコードid値は赤のフラグです。代わりにrefを使用してください。

0

あなたが間違った方法で色を比較していることを伝える前でさえ、まずdocument.getElementById('myH1').style;は、CSSルールによって適用されるスタイルではなく、インラインスタイルを返します。あなたは動的にCSSルールを変更し、それに対してインラインスタイルを見ています。

関連する問題