このフィドルでhttp://jsfiddle.net/mungbeans/f2ne6/2/
cssで定義されているときにjsでアクセスすると不透明度が定義されないのはなぜですか?
答えは、スタイルも未定義であるためだと思いますが、不透明度を定義する前にスタイルを明示的に追加する必要があるのはなぜですか?
編集 [] の欠如は、ソースからフィドルにコピーしたときに作成されたタイプミスです。スタイル/不透明度の問題は、その点で正しい元のコードにまだ存在します。
このフィドルでhttp://jsfiddle.net/mungbeans/f2ne6/2/
cssで定義されているときにjsでアクセスすると不透明度が定義されないのはなぜですか?
答えは、スタイルも未定義であるためだと思いますが、不透明度を定義する前にスタイルを明示的に追加する必要があるのはなぜですか?
編集 [] の欠如は、ソースからフィドルにコピーしたときに作成されたタイプミスです。スタイル/不透明度の問題は、その点で正しい元のコードにまだ存在します。
title.style.opacity
次のようにする必要があります。
title[0].style.opacity
getElementsByTagName は nodeList を返すためです。
編集:
これはまだ値を取得していません。次のことを行う必要があります。
window.getComputedStyle(title[0]).opacity
理由は 2 つあります。
getElementsByTagName()
のような単一の要素ではなく、要素のリストを返しますgetElementById()
。NodeList
したがって、必要な DOM 要素を取得するには、結果に添字を付ける必要があります。style
は、要素のプロパティを介してスタイルにアクセスすると、 CSS クラスを介して割り当てたスタイルではなく、インラインスタイルのみを取得することです。計算されたスタイルを取得するには、を使用できます。これにより、要素のすべての CSS プロパティのwindow.getComputedStyle()
最終的な使用値が得られます。
alert(window.getComputedStyle(title).opacity);
デモ。
残念ながら、 IE < 9 では利用できgetComputedStyle
ませんが、このようなポリフィルを簡単に見つけることができます。
これは、(DOM 内の) HTML 要素の style プロパティには計算されたスタイルが含まれておらず、要素の直接定義されたスタイルが含まれているためです。次の HTML を検討してください。
<div id="one" style="width: 50px;"></div>
お電話document.getElementById("one").style.width
いただければ"50px"
折り返します。ただし、style
属性を削除し、代わりに CSS を使用して div のスタイルを 50 ピクセルの幅にすると、""
. ここで実際にこれを見ることができます:
おそらく、計算されたスタイルを探しているでしょう。これは、ほとんどのブラウザーでgetComputedStyle()
. おそらくIE <9でそれを行う方法がありますが、IEではIE9まで動作しません。計算されたスタイルは、定義されている場所に関係なく不透明度を返します。getComputedStyle()
ここで更新された例を参照してください。
Chase は正しいですが、コードには別の問題があります。このstyle
プロパティには、要素の属性で設定されたスタイルのみが含まれているstyle
ため、Chase のソリューションは問題の修正の途中までしか進みません。やりたいことは、getComputedStyle()
関数を使用して要素のランタイム スタイルを取得することです。
function test(id) {
var listElement = document.getElementById(id);
var titles = listElement.getElementsByTagName("div");
var style = getComputedStyle(titles[0]);
alert( "Opacity: " + style.opacity );
}
私の更新された jsfiddle をここで参照してください: http://jsfiddle.net/7vQ4A/1/