8314

.hide()関数、.show()またはを使用して、要素の表示を切り替えることは可能.toggle()ですか?

要素がまたはであるかどうかをどのようにテストしますvisiblehidden

4

63 に答える 63

9949

質問は単一の要素を参照しているため、次のコードの方が適している可能性があります。

// Checks CSS content for display:[none|block], ignores visibility:[true|false]
$(element).is(":visible");

// The same works with hidden
$(element).is(":hidden");

twernt の提案と同じですが、単一の要素に適用されます。jQuery FAQ で推奨されているアルゴリズムと一致します。

jQuery のis()を使用して、選択した要素を別の要素、セレクター、または任意の jQuery オブジェクトでチェックします。このメソッドは、渡されたパラメーターを満たす一致を見つけるために、DOM 要素に沿ってトラバースします。一致する場合は true を返し、そうでない場合は false を返します。

于 2008-10-07T13:30:22.217 に答える
1561

hiddenセレクターを使用できます:

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

そしてvisibleセレクター:

// Matches all elements that are visible
$('element:visible')
于 2008-10-07T13:16:15.160 に答える
1046
if ( $(element).css('display') == 'none' || $(element).css("visibility") == "hidden"){
    // 'element' is hidden
}

上記の方法は、親の可視性を考慮していません。親も考慮するには、.is(":hidden")またはを使用する必要があります.is(":visible")

例えば、

<div id="div1" style="display:none">
  <div id="div2" style="display:block">Div2</div>
</div>

上記のメソッドは、見えないdiv2間は見えると見なします:visible。ただし、上記は多くの場合、特に非表示の親にエラー div が表示されているかどうかを確認する必要がある場合に役立ちます。そのような状況で:visibleは機能しないためです。

于 2008-10-07T13:09:04.100 に答える
569

これらの回答のどれも、私が探していた質問であると理解しているものに対処していませvisibility: hiddenん。. どちら:visible:hiddenドキュメントごとの表示を探しているため、どちらもこれを処理しません。私が判断できる限り、CSS の可視性を処理するセレクターはありません。これが私が解決した方法です(標準のjQueryセレクター、より凝縮された構文があるかもしれません):

$(".item").each(function() {
    if ($(this).css("visibility") == "hidden") {
        // handle non visible state
    } else {
        // handle visible state
    }
});
于 2011-03-24T18:44:10.323 に答える
418

トグルされた要素の状態を確認するにはどうすればよいですか?から


:visibleおよび:hiddenセレクターを使用して、要素が折りたたまれているかどうかを判断できます。

var isVisible = $('#myDiv').is(':visible');
var isHidden = $('#myDiv').is(':hidden');

可視性に基づいて要素を操作するだけの場合は、セレクター式に:visibleorを含めることができます。:hidden例えば:

 $('#myDiv:visible').animate({left: '+=200px'}, 'slow');
于 2011-01-13T21:13:18.467 に答える
317

何かが表示されているかどうかを確認するとき、すぐに先に進み、それに対して別のことをすることがよくあります。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" });
于 2009-07-25T10:21:40.420 に答える
259

jQueryのドキュメントによる:visibleセレクター:

  • CSSdisplay値はnone。です。
  • それらは。を持つフォーム要素type="hidden"です。
  • それらの幅と高さは明示的に0に設定されます。
  • 祖先要素は非表示になっているため、その要素はページに表示されません。

visibility: hiddenまたはを含む要素opacity: 0は、レイアウト内のスペースをまだ消費するため、表示されていると見なされます。

これは、ある場合には便利で、他の場合には役に立たない。なぜならdisplay != none、親の可視性を無視して要素が表示されているかどうかをチェックしたい場合()、実行が.css("display") == 'none'高速であるだけでなく、可視性チェックを正しく返すことがわかるからです。

表示ではなく可視性を確認する場合は、次を使用する必要があります.css("visibility") == "hidden"

追加のjQueryノートも考慮に入れてください。

:visibleはjQuery拡張機能であり、CSS仕様の一部ではないため、を使用するクエリは、ネイティブDOMメソッドによって提供されるパフォーマンスの向上を利用できませ:visibleん。querySelectorAll()を使用して要素を選択するときに最高のパフォーマンスを実現するには:visible、最初に純粋なCSSセレクターを使用して要素を選択し、次にを使用します.filter(":visible")

また、パフォーマンスが気になる場合は、 [ Now you see me…パフォーマンスの表示/非表示(2010-05-04)]を確認してください。また、他のメソッドを使用して要素を表示および非表示にします。

于 2011-11-25T09:16:10.040 に答える
230

要素の可視性と jQuery の仕組み;

display:nonevisibility:hiddenまたはで要素を非表示にすることができますopacity:0。これらの方法の違い:

  • display:none要素を非表示にし、スペースを占有しません。
  • visibility:hidden要素を非表示にしますが、レイアウト内のスペースを占有します。
  • opacity:0要素を「visibility:hidden」として非表示にしますが、レイアウト内のスペースを占有します。唯一の違いは、不透明度によって要素を部分的に透明にできることです。

    if ($('.target').is(':hidden')) {
      $('.target').show();
    } else {
      $('.target').hide();
    }
    if ($('.target').is(':visible')) {
      $('.target').hide();
    } else {
      $('.target').show();
    }
    
    if ($('.target-visibility').css('visibility') == 'hidden') {
      $('.target-visibility').css({
        visibility: "visible",
        display: ""
      });
    } else {
      $('.target-visibility').css({
        visibility: "hidden",
        display: ""
      });
    }
    
    if ($('.target-visibility').css('opacity') == "0") {
      $('.target-visibility').css({
        opacity: "1",
        display: ""
      });
    } else {
      $('.target-visibility').css({
        opacity: "0",
        display: ""
      });
    }
    

    便利な jQuery トグル メソッド:

    $('.click').click(function() {
      $('.target').toggle();
    });
    
    $('.click').click(function() {
      $('.target').slideToggle();
    });
    
    $('.click').click(function() {
      $('.target').fadeToggle();
    });
    
于 2012-04-24T21:04:11.617 に答える
229

これは私にとってはうまくいきます.andを使用show()hide()て、divを非表示/表示にしています:

if( $(this).css('display') == 'none' ){
    /* your code goes here */
} else {
    /* alternate logic   */
}
于 2011-07-06T20:19:00.383 に答える
176

プレーンな JavaScript を使用してこれを行うこともできます。

function isRendered(domObj) {
    if ((domObj.nodeType != 1) || (domObj == document.body)) {
        return true;
    }
    if (domObj.currentStyle && domObj.currentStyle["display"] != "none" && domObj.currentStyle["visibility"] != "hidden") {
        return isRendered(domObj.parentNode);
    } else if (window.getComputedStyle) {
        var cs = document.defaultView.getComputedStyle(domObj, null);
        if (cs.getPropertyValue("display") != "none" && cs.getPropertyValue("visibility") != "hidden") {
            return isRendered(domObj.parentNode);
        }
    }
    return false;
}

ノート:

  1. どこでも動作

  2. ネストされた要素で機能します

  3. CSS とインライン スタイルに対応

  4. フレームワークを必要としない

于 2012-07-16T19:18:19.367 に答える
175

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

非表示/表示するには、 を呼び出します.addClass("hide")/.removeClass("hide")。可視性を確認するには、 を使用します.hasClass("hide")

.toggle()またはメソッドを使用する予定がない場合、要素をチェック/非表示/表示する簡単で明確な.animate()方法です。

于 2012-02-03T16:04:31.903 に答える
151

デモリンク

$('#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="https://upload.wikimedia.org/wikipedia/commons/8/87/Google_Chrome_icon_%282011%29.png" alt="" width="300"/>

ソース (私のブログから):

Blogger Plug n Play - jQuery ツールとウィジェット: jQuery を使用して要素が非表示か表示かを確認する方法

于 2013-01-25T05:34:11.117 に答える
142

hidden次のようにorvisible属性を単純に使用できます。

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

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

$(element).is(":visible")
于 2012-05-23T12:59:08.400 に答える
141

ebdivに設定する必要がありますstyle="display:none;"。表示と非表示の両方で機能します。

$(document).ready(function(){
    $("#eb").click(function(){
        $("#ebdiv").toggle();
    });    
});
于 2012-06-13T13:20:45.833 に答える
129

考慮すべきもう1つの答えは、要素を非表示にする場合はjQueryを使用する必要がありますが、実際に要素を非表示にする代わりに、要素全体を削除しますが、HTMLコンテンツとタグ自体を jQuery 変数にコピーしてから、通常の を使用して、画面にそのようなタグがあるかどうかをテストするだけですif (!$('#thetagname').length)

于 2012-04-21T23:40:30.517 に答える
111

jQuery でセレクターに対して要素をテストする場合、子要素が表示されていても、絶対配置された要素が非表示として認識される可能性がある:hiddenことを考慮する必要があります。

これは、そもそも直観に反するように思えますが、jQuery のドキュメントをよく見ると、関連する情報が得られます。

要素が非表示であると見なされる理由はいくつかあります: [...] それらの幅と高さは明示的に 0 に設定されています。 [...]

したがって、これは実際には、ボックスモデルと要素の計算されたスタイルに関して意味があります。width と height が明示的に 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 では、説明されている動作が変更されます。要素は、幅や高さがゼロのレイアウト ボックスを含むレイアウト ボックスがある場合、可視と見なされます。

jQuery 3.0.0-alpha1 を使用した JSFiddle:

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

同じ JavaScript コードの出力は次のようになります。

console.log($('.foo').is(':hidden')); // false
console.log($('.bar').is(':hidden')); // false
于 2014-05-06T10:50:31.090 に答える
99
expect($("#message_div").css("display")).toBe("none");
于 2012-07-20T12:44:24.263 に答える
84

$(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>

于 2013-10-28T06:43:14.080 に答える
71

表示されていないかどうかを確認するには、次を使用します!

if ( !$('#book').is(':visible')) {
    alert('#book is not visible')
}

または、次も同じです。jQueryセレクターを変数に保存して、複数回必要な場合のパフォーマンスを向上させます。

var $book = $('#book')

if(!$book.is(':visible')) {
    alert('#book is not visible')
}
于 2013-06-04T13:42:53.373 に答える
63

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」はアドブロッカーがブロックするIDです。したがって、表示されているかどうかを確認すると、アドブロッカーがオンになっているかどうかを検出できます。

于 2015-04-27T07:57:27.150 に答える
63

結局のところ、どの例も私には合わないので、自分で書きました。

テスト(Internet Explorer のサポートなしfilter:alpha):

a) ドキュメントが非表示になっていないかどうかを確認する

b)要素の幅/高さ/不透明度がゼロであるか、またはdisplay:none/visibility:hiddenインラインスタイルであるかどうかを確認します

c)要素の中心(すべてのピクセル/コーナーをテストするよりも高速であるため)が他の要素(およびすべての祖先、例:overflow:hidden/スクロール/別の要素の上にある要素)または画面の端によって隠れていないかどうかを確認します

d) 要素の幅、高さ、不透明度、またはdisplay:none可視性がゼロであるかどうかを確認します:計算されたスタイルで (すべての祖先の中で)

テスト済み

Android 4.4 (ネイティブ ブラウザー/Chrome/Firefox)、Firefox (Windows/Mac)、Chrome (Windows/Mac)、Opera (Windows Presto /Mac WebKit)、Internet Explorer (Internet Explorer 5-11 ドキュメント モード + Internet Explorer 8 on a仮想マシン)、および Safari (Windows/Mac/iOS)。

var is_visible = (function () {
    var x = window.pageXOffset ? window.pageXOffset + window.innerWidth - 1 : 0,
        y = window.pageYOffset ? window.pageYOffset + window.innerHeight - 1 : 0,
        relative = !!((!x && !y) || !document.elementFromPoint(x, y));
        function inside(child, parent) {
            while(child){
                if (child === parent) return true;
                child = child.parentNode;
            }
        return false;
    };
    return function (elem) {
        if (
            document.hidden ||
            elem.offsetWidth==0 ||
            elem.offsetHeight==0 ||
            elem.style.visibility=='hidden' ||
            elem.style.display=='none' ||
            elem.style.opacity===0
        ) return false;
        var rect = elem.getBoundingClientRect();
        if (relative) {
            if (!inside(document.elementFromPoint(rect.left + elem.offsetWidth/2, rect.top + elem.offsetHeight/2),elem)) return false;
        } else if (
            !inside(document.elementFromPoint(rect.left + elem.offsetWidth/2 + window.pageXOffset, rect.top + elem.offsetHeight/2 + window.pageYOffset), elem) ||
            (
                rect.top + elem.offsetHeight/2 < 0 ||
                rect.left + elem.offsetWidth/2 < 0 ||
                rect.bottom - elem.offsetHeight/2 > (window.innerHeight || document.documentElement.clientHeight) ||
                rect.right - elem.offsetWidth/2 > (window.innerWidth || document.documentElement.clientWidth)
            )
        ) return false;
        if (window.getComputedStyle || elem.currentStyle) {
            var el = elem,
                comp = null;
            while (el) {
                if (el === document) {break;} else if(!el.parentNode) return false;
                comp = window.getComputedStyle ? window.getComputedStyle(el, null) : el.currentStyle;
                if (comp && (comp.visibility=='hidden' || comp.display == 'none' || (typeof comp.opacity !=='undefined' && comp.opacity != 1))) return false;
                el = el.parentNode;
            }
        }
        return true;
    }
})();

使い方:

is_visible(elem) // boolean
于 2014-04-09T17:06:44.017 に答える
40

( jQuery :visible SelectorElements with visibility: hidden or opacity: 0 are considered visible, since they still consume space in the layoutで説明されているように) -この方法で要素が実際に表示されているかどうかを確認できます。

function isElementReallyHidden (el) {
    return $(el).is(":hidden") || $(el).css("visibility") == "hidden" || $(el).css('opacity') == 0;
}

var booElementReallyShowed = !isElementReallyHidden(someEl);
$(someEl).parents().each(function () {
    if (isElementReallyHidden(this)) {
        booElementReallyShowed = false;
    }
});
于 2014-03-19T12:42:17.013 に答える
36

要素が UI に表示されているかどうかを判断するために、可視性/表示属性をチェックする関数を作成できます。

function checkUIElementVisible(element) {
    return ((element.css('display') !== 'none') && (element.css('visibility') !== 'hidden'));
}

働くフィドル

于 2014-08-29T20:20:35.590 に答える
35

また、要素の状態を確認してから切り替えるための三項条件式は次のとおりです。

$('someElement').on('click', function(){ $('elementToToggle').is(':visible') ? $('elementToToggle').hide('slow') : $('elementToToggle').show('slow'); });
于 2013-11-05T23:32:02.897 に答える
34
if($('#postcode_div').is(':visible')) {
    if($('#postcode_text').val()=='') {
        $('#spanPost').text('\u00a0');
    } else {
        $('#spanPost').text($('#postcode_text').val());
}
于 2013-11-15T10:41:14.557 に答える
32
.is(":not(':hidden')") /*if shown*/
于 2014-04-12T07:38:40.827 に答える
22
if($('#id_element').is(":visible")){
   alert('shown');
}else{
   alert('hidden');
}
于 2015-08-18T09:04:15.413 に答える
21

私はこれを検索しましたが、私の場合には正しい答えはありません。そのため、目が要素を見ることができない場合に false を返す関数を作成しました

jQuery.fn.extend({
  isvisible: function() {
    //
    //  This function call this: $("div").isvisible()
    //  Return true if the element is visible
    //  Return false if the element is not visible for our eyes
    //
    if ( $(this).css('display') == 'none' ){
        console.log("this = " + "display:none");
        return false;
    }
    else if( $(this).css('visibility') == 'hidden' ){
        console.log("this = " + "visibility:hidden");   
        return false;
    }
    else if( $(this).css('opacity') == '0' ){
        console.log("this = " + "opacity:0");
        return false;
    }   
    else{
        console.log("this = " + "Is Visible");
        return true;
    }
  }  
});
于 2016-06-01T06:36:49.450 に答える
19

としてhide()、要素にインライン css (display:none または display:block) をアタッチしますshow()toggle()同様に、三項演算子を使用して、表示 CSS をチェックすることで、要素が非表示か表示かを簡単に確認できます。

アップデート:

  • 要素 CSS が visibility: "visible" または visibility: "hidden" に設定されているかどうかも確認する必要があります。
  • display プロパティが inline-block、block、flex に設定されている場合、要素も表示されます。

したがって、要素を非表示にするプロパティを確認できます。だから彼らはそうdisplay: noneですvisibility: "hidden";

要素を非表示にするプロパティをチェックするためのオブジェクトを作成できます。

var hiddenCssProps = {
display: "none",
visibility: "hidden"
}

キーの要素プロパティが非表示のプロパティ値と一致するかどうかは、オブジェクト マッチングの各キー値をループすることで確認できます。

var isHidden = false;
for(key in hiddenCssProps) {
  if($('#element').css(key) == hiddenCssProps[key]) {
     isHidden = true;
   }
}

要素の高さ: 0 または幅: 0 以上のようなプロパティを確認したい場合は、このオブジェクトを拡張してさらにプロパティを追加し、確認することができます。

于 2016-11-05T12:26:27.057 に答える
17

これを使用できます:

$(element).is(':visible');

サンプルコード

$(document).ready(function()
{
    $("#toggle").click(function()
    {
        $("#content").toggle();
    });

    $("#visiblity").click(function()
    {
       if( $('#content').is(':visible') )
       {
          alert("visible"); // Put your code for visibility
       }
       else
       {
          alert("hidden");
       }
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>

<p id="content">This is a Content</p>

<button id="toggle">Toggle Content Visibility</button>
<button id="visibility">Check Visibility</button>

于 2016-05-02T12:31:08.800 に答える
14

明確にしたいのですが、jQueryでは、

要素は、いくつかの理由で非表示と見なされます。

  • これらの CSS 表示値は none です。
  • それらは type="hidden" のフォーム要素です。
  • それらの幅と高さは明示的に 0 に設定されています。
  • 先祖要素は隠されているため、要素はページに表示されません。

可視性: 非表示または不透明度: 0 の要素は、レイアウト内のスペースを消費するため、可視と見なされます。要素を非表示にするアニメーション中、要素はアニメーションの最後まで表示されていると見なされます。

ソース: :hidden セレクター | jQuery API ドキュメント

if($('.element').is(':hidden')) {
  // Do something
}
于 2016-12-06T08:44:11.063 に答える
12

クラスが表示されているときにクラスを追加できます。クラスを追加しshowます。次に、クラスがあることを確認します。

$('#elementId').hasClass('show');

showクラスがある場合は true を返します。

次のように CSS を追加します。

.show{ display: block; }
于 2016-04-04T08:21:05.327 に答える
5

要素が表示されているかどうか、表示されていないかどうか、さらには不透明度レベルをチェックするための拡張機能

false要素が表示されていない場合に返されます。

function checkVisible(e) {
    if (!(e instanceof Element)) throw Error('not an Element');
    const elementStyle = getComputedStyle(e);
    if (elementStyle.display === 'none' || elementStyle.visibility !== 'visible' || elementStyle.opacity < 0.1) return false;
    if (e.offsetWidth + e.offsetHeight + e.getBoundingClientRect().height +
        e.getBoundingClientRect().width === 0) {
        return false;
    }
    const elemCenter   = {
        x: e.getBoundingClientRect().left + e.offsetWidth / 2,
        y: e.getBoundingClientRect().top + e.offsetHeight / 2
    };
    if (elemCenter.x < 0 || elemCenter.y < 0) return false;
    if (elemCenter.x > (document.documentElement.clientWidth || window.innerWidth)) return false;
    if (elemCenter.y > (document.documentElement.clientHeight || window.innerHeight)) return false;
    let pointContainer = document.elementFromPoint(elemCenter.x, elemCenter.y);
    do {
        if (pointContainer === e) return true;
    } while (pointContainer = pointContainer.parentNode);
    return false;
}
于 2020-02-15T19:54:11.010 に答える
3
if($("h1").is(":hidden")){
    // your code..
}
于 2016-03-23T13:21:42.460 に答える
1
   hideShow(){
  $("#accordionZiarat").hide();
  // Checks CSS content for display:[none|block], ignores visibility:[true|false]
  if ($("#accordionZiarat").is(":visible")) {
    $("#accordionZiarat").hide();
  }

  
  else if ($("#accordionZiarat").is(":hidden")) {
    $("#accordionZiarat").show();
  }

  else{

  }
于 2020-09-02T07:36:11.550 に答える
0
if($(element).is(":visible")) {
  console.log('element is visible');
} else {
  console.log('element is not visible');
}
于 2021-01-22T11:32:13.617 に答える