jQuery セレクタ 可視条件のセレクタ

これらは、要素の表示状態を利用して抽出条件とするセレクタです。:hiddenはページ上で隠された要素にマッチします。隠されたと判断される条件は、次のようにいくつかあります。

  • display:noneが指定されている要素
  • input type=”hidden”のフォーム要素
  • widthやheightが0に設定されている要素
  • 親要素、より上階層の要素が隠されているため表示されていない要素

ただし、スタイル「visibility:hidden」に設定されている要素は「、jQuery1.3.2以降:hiddenセレクタにマッチしないようになりました。CSSの仕様では、要素自体が隠されるdisplay:noneと異なり、visibility:hiddenでは要素自体はレイアウトされ、中身だけが隠されてます。jQueryの仕様は、「ドキュメント上に場所をとってレイアウトされているものは、隠されているとみなさない」ということのようです。:visibleは、:hiddenにマッチしない要素すべてがマッチします。

書式

$(':hidden')
$(':visible')
$('div:hidden')
$('div:visible')

サンプル

可視条件のセレクタ。サンプルでは「表示する」ボタンをクリックすることによって隠された「リスト3」を表示されます。「表示する」ボタンではセレクタにリスト内の隠された要素として「li:hidden」を指定しているため「リスト3」が表示されますが、「隠す」ボタンのセレクタ「li:visible」ではhiddenにマッチしないli要素すべてが選択されるためリスト1~4が隠されます。

<head>
    <meta charset="UTF-8">
    <title>テストページ</title>
    <script src="https://code.jquery.com/jquery-3.7.1.min.js" integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script>
    <style>
      ul{
        list-style: none;
      }
    </style>
</head>
<body>
    <ul>
      <li>リスト1</li>
      <li>リスト2</li>
      <li>リスト3(隠されていた要素)</li>
      <li>リスト4</li>
    </ul>
    <button id="show">表示する</button>
    <button id="hide">隠す</button>
</body>
<script>
  $(document).ready(function(){
   $('li:eq(2)').css('display','none');

   $('#show').on('click',function(){
    $('li:hidden').css('display','block');
   });

   $('#hide').on('click',function(){
    $('li:visible').css('display','none');
   });
    
  });
</script>
実行結果
表示するボタンをクリック
実行結果
隠すボタンをクリック