JavaScriptで要素のCSS表示を確認する


95

要素のCSS display == blockまたはnoneJavaScriptを使用しているかどうかを確認することはできますか?

回答:


111

sdleihssirhcが以下に述べるように、要素displayがCSSルールによって継承または指定されている場合は、計算されたスタイル取得する必要があります。

return getComputedStyle(element, null).display;

要素にはstyle、スタイルがインラインまたはJavaScriptで宣言されている場合に、必要な情報を提供するプロパティがあります。

console.log(document.getElementById('someIDThatExists').style.display);

文字列値を提供します。


2
それがCSSをインライン化していない場合はどうなりますか?
jscripter 2014年

5
簡単にするために、常に計算されたスタイルを常に取得しないのはなぜですか?
cadeゴールト、

12
なにcurrentStyle?聞いたことがない、またチェックdocument.body.currentStyleして何も得られなかった(驚かなかった)
vsync

1
@vsync(および将来の参照用)MDNよれば、これは古いバージョンのInternet Explorerの独自のプロパティです。
user202729

2
コメントをありがとう。最新のウェブ用に更新された回答。
Dan Davies Brackett

78

スタイルがインラインまたはJavaScriptで宣言されている場合は、styleオブジェクトを取得するだけです。

return element.style.display === 'block';

それ以外の場合は、計算されたスタイルを取得する必要があり、ブラウザーに不整合があります。IEは単純なcurrentStyleオブジェクトを使用しますが、他のすべての人はメソッドを使用します。

return element.currentStyle ? element.currentStyle.display :
                              getComputedStyle(element, null).display;

これnullは、Firefoxバージョン3以下で必要でした。


この場合、これは==であってはなりませんか?
Kai Qing

@カイトリプルイコールは型強制を行いません。Crockfordは、「===and !==Operators 」というセクションでその理由を説明しています
sdleihssirhc

面白いですね。こんなに長い年月のプログラミングの後で、このようなものがどのようにして気付かないのかおかしい。私は常に===が厳密なブール値であるという提案を採用しました。知ってよかった。
Kai Qing

3
@改:ここで===はなく使用しても問題ありません==が、同様に利点もありません。両方のオペランドは文字列であることが保証されているため、両方の演算子はまったく同じステップを実行します。
Tim Down

1
@hippietrailそしてほぼ10年後(2019-10-27)にはまだ問題があります。MDNレポートの内容を
フェリペアラメダA

37

jQueryの場合、このような意味ですか?

$('#object').css('display');

次のように確認できます。

if($('#object').css('display') === 'block')
{
    //do something
}
else
{
    //something else
}

9
答えを過度に複雑にしないでください。jQueryが標準になりつつあることは知っていますが、要素の表示スタイルを確認するためだけにフレームワーク全体を追加する理由はありません。
zzzzBov

14
ええ、でも私はこれをやったのは、誰もがjavascriptの答えをそのままにしていたからです。もし彼がjqueryを使っていて、それを明記していなかったとしたら、投稿にいくつかの使い方があるでしょう
Kai Qing

18

この答えはあなたが望むものではありませんが、場合によっては役立つかもしれません。要素が表示されたときにいくつかの寸法があることがわかっている場合は、これも使用できます。

var hasDisplayNone = (element.offsetHeight === 0 && element.offsetWidth === 0);

編集:これはCSS displayプロパティの直接チェックよりも優れているのはなぜですか?すべての親要素をチェックする必要がないためです。親要素にがある場合display: none、その子も非表示になりますが、まだありelement.style.display !== 'none'ます。


確かに、これは便利です。
Jonatas Walker 2017


5

基本的なJavaScript:

if (document.getElementById("elementId").style.display == 'block') { 
  alert('this Element is block'); 
}

2

プレーンなJavaScriptで表示されるかどうかを確認するには、displayプロパティが「none」であるかどうかを確認します(「block」を確認しないでください。空白または「インライン」であっても表示されている可能性があります)。

var isVisible = (elt.style.display != "none");

jQueryを使用している場合は、代わりにこれを使用できます。

var isVisible = $elt.is(":visible");

0

純粋なJavaScriptを使用すると、style.displayプロパティを確認できます。jQueryを使用すると、$('#id').css('display')


-1

あなたはそれを例えばjQueryでチェックすることができます:

$("#elementID").css('display');

この要素の表示プロパティに関する情報を含む文字列を返します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.