javascript visible 設定 - jQueryで要素が非表示になっているかどうかを確認するにはどうすればよいですか?





15 Answers

hiddenセレクタを使用することができます:

// Matches all elements that are hidden
$('element:hidden')

visibleセレクタ:

// Matches all elements that are visible
$('element:visible')
取得 セレクタ 判定

関数.hide() .show()または.show()を使用して、要素の可視性を切り替えることができます。

要素が表示されているか隠れているかはどのようにテストしますか?




これらの回答は、私がvisibility: hiddenを持つアイテムを扱うにはどうすればよいですかvisibility: hiddenますか?:visible:hidden :visibleどちらもドキュメンテーションごとの表示を探しているので、これを処理しません。 私が知る限り、CSSの可視性を扱うセレクタはありません。 ここで私はそれを解決した方法です(標準のjQueryセレクタ、より凝縮された構文があります):

$(".item").each(function() {
    if ($(this).css("visibility") == "hidden") {
        // handle non visible state
    } else {
        // handle visible state
    }
});



何かが目に見えるかどうかを確認するときに、すぐにすぐに行き、それで他の何かをするつもりです。 jQueryの連鎖はこれを簡単にします。

だからセレクタを持っていて、それが表示されているか隠されている場合にのみアクションを実行したい場合は、 filter(":visible")またはfilter(":hidden")して、取る。

したがってif文の代わりに、次のようにします。

if ($('#btnUpdate').is(":visible"))
{
     $('#btnUpdate').animate({ width: "toggle" });   // Hide button
}

またはより効率的ですが、醜いこともあります:

var button = $('#btnUpdate');
if (button.is(":visible"))
{
     button.animate({ width: "toggle" });   // Hide button
}

あなたはすべてを1行で行うことができます:

$('#btnUpdate').filter(":visible").animate({ width: "toggle" });



これは私にとってはうまくいくものです。私はdivを非表示にするhide() show()hide()を使用しています:

if( $(this).css('display') == 'none' ){
    /* your code goes here */
} else {
    /* alternate logic   */
}



私はCSSクラスを使用します.hide { display: none!important; } .hide { display: none!important; }

隠蔽/表示のために、私は.addClass("hide")/.removeClass("hide")を呼び出します。 可視性をチェックするために、私は.hasClass("hide")を使用します。

.animate()メソッドや.animate()メソッドを使用する予定がない場合は、要素をチェック/非表示/表示するためのシンプルで明確な方法です。




次のように、 hidden属性またはvisible属性を単純に使用visibleます。

$('element:hidden')
$('element:visible')

あるいは、次のように単純化することもできます。

$(element).is(":visible")



$('#clickme').click(function() {
  $('#book').toggle('slow', function() {
    // Animation complete.
    alert($('#book').is(":visible")); //<--- TRUE if Visible False if Hidden
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="clickme">
  Click here
</div>
<img id="book" src="http://www.chromefusion.com/wp-content/uploads/2012/06/chrome-logo.jpg" alt="" />

ソース:

Blogger Plug n Play - jQueryツールとウィジェット:要素が隠されているかどうかを確認する方法jQueryを使用する

jsFiddle:

JSFiddle - ipsjolly - k4WWj




jQueryの:hiddenセレクタに対して要素をテストする場合、子要素が表示されているにもかかわらず、絶対配置された要素が非表示として認識されることが考えられます

jQueryのドキュメントを詳しく見ていくと、関連する情報が得られます。

要素はいくつかの理由で隠されていると考えることができます:[...]幅と高さは明示的に0に設定されています。[...]

これは実際に要素のボックスモデルと計算されたスタイルに関しては意味があります。 幅と高さが明示的に0に設定されていなくても、 暗黙的に設定されることがあります。

次の例を見てください:

console.log($('.foo').is(':hidden')); // true
console.log($('.bar').is(':hidden')); // false
.foo {
  position: absolute;
  left: 10px;
  top: 10px;
  background: #ff0000;
}

.bar {
  position: absolute;
  left: 10px;
  top: 10px;
  width: 20px;
  height: 20px;
  background: #0000ff;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="foo">
  <div class="bar"></div>
</div>

JQUERY 3.xの更新:

jQuery 3では、記述された動作が変わります! 幅や高さがゼロのレイアウトボックスを含むレイアウトボックスがあれば、要素は可視と見なされます。

JSFiddle with jQuery 3.0.0-alpha1:

http://jsfiddle.net/pM2q3/7/

同じJSにこの出力があります:

console.log($('.foo').is(':hidden')); // false
console.log($('.bar').is(':hidden')); // false



例:

$(document).ready(function() {
  if ($("#checkme:hidden").length) {
    console.log('Hidden');
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="checkme" class="product" style="display:none">
  <span class="itemlist"><!-- Shows Results for Fish --></span> Category:Fish
  <br>Product: Salmon Atlantic
  <br>Specie: Salmo salar
  <br>Form: Steaks
</div>




スタイルの編集ではなく、クラスの切り替えを使用します。 。 。

要素を「隠す」ために指定されたクラスを使用することは簡単で、最も効率的な方法の1つです。 Displayスタイル 'none'で 'hidden'クラスを切り替えると、そのスタイルを直接編集するよりも速く実行されます。 私はこれをかなり徹底的にの質問で説明しました同じdivに2つの要素を表示/非表示にしています。

JavaScriptのベストプラクティスと最適化

GoogleのフロントエンドエンジニアNicholas ZakasによるGoogle Tech Talkの真に啓発的なビデオは次のとおりです。




adblockerの目に見えるチェックを使用する例が有効化されています:

$(document).ready(function(){
  if(!$("#ablockercheck").is(":visible"))
    $("#ablockermsg").text("Please disable adblocker.").show();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="ad-placement" id="ablockercheck"></div>
<div id="ablockermsg" style="display: none"></div>

"ablockercheck"は、adblockerがブロックするIDです。 したがって、それが目に見えているかどうかを確認することで、広告ブロッカーがオンになっているかどうかを検出できます。




多分このようなことをすることができます

$(document).ready(function() {
   var visible = $('#tElement').is(':visible');

   if(visible) {
      alert("visible");
                    // Code
   }
   else
   {
      alert("hidden");
   }
});
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>

<input type="text" id="tElement" style="display:block;">Firstname</input>




if($('#postcode_div').is(':visible')) {
    if($('#postcode_text').val()=='') {
        $('#spanPost').text('\u00a0');
    } else {
        $('#spanPost').text($('#postcode_text').val());
}



次のようなブール値をチェックするだけで、可視性を確認するだけです。

if (this.hidden === false) {
    // Your code
}

私はこのコードを各機能に使用しました。 それ以外の場合は、要素の可視性をチェックするためにis(':visible')を使用できます。




また、要素の状態をチェックし、それをトグルする三項条件式もあります:

$('someElement').on('click', function(){ $('elementToToggle').is(':visible') ? $('elementToToggle').hide('slow') : $('elementToToggle').show('slow'); });



Related