jQuery 要素が表示されているかどうか?

jQuery 要素が表示されているかどうかの判定

jQuery 要素が表示されているかどうかの判定

Webページの構築において、要素が表示されているかどうかを判定することはよくあります。例えば、表示されている要素だけにアニメーションを適用したり、非表示の要素は処理をスキップしたりする場合などです。jQueryでは、要素が表示されているかどうかを簡単に判定する方法がいくつか用意されています。

:visible セレクタ と is(":visible") メソッド

jQueryで要素が表示されているかどうかを判定する最も一般的な方法は、:visible セレクタ または is(":visible") メソッドを使用することです。


    if ($(element).is(":visible")) {
      // 要素が表示されている場合の処理
    } else {
      // 要素が非表示の場合の処理
    }
  

:visible セレクタと is(":visible") メソッドは、要素が表示領域内に存在し、かつ、幅と高さが0より大きい場合にtrueを返します。要素が非表示の場合や、親要素が非表示の場合はfalseを返します。

注意点

:visible セレクタと is(":visible") メソッド は、要素のCSSプロパティの値を直接参照するわけではありません。そのため、要素の表示状態をJavaScriptで動的に変更した場合、これらのメソッドの結果が期待通りにならない場合があります。

例えば、JavaScriptで要素の display プロパティを none に設定した場合、要素は非表示になりますが、:visible セレクタと is(":visible") メソッド は true を返す可能性があります。

表示状態による処理の使い分け

要素の表示状態に応じて処理を切り替えたい場合は、以下のように使い分けると便利です。

表示状態 判定方法 説明
表示されている $(element).is(":visible") 要素が表示領域内に存在し、かつ、幅と高さが0より大きい場合にtrueを返します。
非表示である !$(element).is(":visible") 要素が非表示の場合や、親要素が非表示の場合はtrueを返します。

参考資料

関連QA

Q1: :hidden セレクタ との違いは何ですか?

:hidden セレクタは、:visible セレクタの逆で、要素が非表示の場合にtrueを返します。

Q2: 要素の透明度が0の場合、表示されていると判定されますか?

要素の透明度が0の場合でも、幅と高さが0より大きければ、:visible セレクタと is(":visible") メソッド は true を返します。

Q3: JavaScriptで要素の表示状態を変更した場合、どのように判定すればよいですか?

JavaScriptで要素の表示状態を変更した場合は、:visible セレクタと is(":visible") メソッド ではなく、getComputedStyle() メソッドなどを使い、要素のCSSプロパティの値を直接参照して判定する必要があります。

その他の参考記事:jquery 次 の 要素