親要素がdisplay:noneかどうかを、子要素で確認する方法
<div style="display:none;font-size:14px"> <p><span id="child">子要素(正確には子孫要素)</span></p> </div>
こんな感じのhtmlがあったときに、display:none が指定されてるdivを見ずに、
id="child"の要素から、自身が表示されているのかどうかを判別したい。
普通にstyleを見ても当然ながらわかりません。
>>> alert(document.getElementById('child').style.display) "" // 空文字 >>> alert(document.getElementById('child').style.fontSize) ""
getComputedStyleを使ってみる
>>> var child_style = getComputedStyle(document.getElementById('child'), ''); >>> // IEだと var child_style = document.getElementById('child').currentStyle; >>> alert(child_style.display) "inline" >>> alert(child_style.fontSize) "14px"
font-sizeプロパティは正しく取得できていますが、
displayプロパティは期待する値ではありません。
これは、displayプロパティが子要素に継承されない属性であるためです。
(「display 継承 css」とかでぐぐると色々出てきます)
しかたないので、要素の高さで確認します。(別に、widthでもいい気がしますが。)
>>> alert(document.getElementById('child').offsetHeight) "0" // divのdisplay:noneを削除したものに対しては、 >>> alert(document.getElementById('child').offsetHeight) "15"
となり、返り値が「0」かどうかで自身が表示されているかどうかが判別できます。
つまり、こういうことです。
if (document.getElementById('child').offsetHeight) { alert('表示されている'); } else { alert('表示されていない'); }
以下の環境で動作を確認しました。
-
-
- -
-
本題とは関係ないですが、画面外にある要素についてはどうなのかも、
気になったので確認してみました。
<div id="disp_out" style="position:absolute;left:-999">画面外の要素</div>
画面上では見えない要素ですが。。。
>>> alert(document.getElementById('disp_out').offsetHeight) "19"
残念、取れちゃいました。
まぁ、こんな判定することはまずないと思うので、いいのですが。