javascript - jquery 表示されている要素を取得 非表示




jQueryで要素が非表示になっているかどうかを確認するにはどうすればよいですか? (30)

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

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

https://code.i-harness.com


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

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

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

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


The :visible jQueryドキュメントに従った:visibleセレクタ:

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

visibility: hidden持つ要素visibility: hiddenまたはopacity: 0は、まだレイアウト内のスペースを消費するため、可視であるとみなされます。

これは、要素が可視かどうか( display != none )、親の可視性を無視してチェックする場合、 .css("display") == 'none'は速いだけでなく、可視性チェックを正しく返します。

表示ではなく視認性をチェックする場合は、 .css("visibility") == "hidden"ます。

追加のjQueryノートも考慮しください:

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

また、パフォーマンスが懸念される場合は、 今すぐ表示されることを確認する必要がありますパフォーマンスの表示/非表示 (2010-05-04) 他の方法を使って要素を表示したり隠したりします。


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です。 したがって、それが目に見えているかどうかを確認することで、広告ブロッカーがオンになっているかどうかを検出できます。


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

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

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

visibleセレクタ:

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

Elements with visibility: hidden or opacity: 0 are considered visible, since they still consume space in the layoutjQuery:visibleセレクタについて説明したように) Elements 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;
    }
});

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

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

どのようにトグルされた要素の状態を判断するのですか?

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

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

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

 $('#myDiv:visible').animate({left: '+=200px'}, 'slow');

要素の可視性とjQueryの動作

要素はdisplay:nonevisibility:hiddenまたはopacity:0 visibility:hidden display:noneことができます。 これらの方法の違いは次のとおりです。

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

    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();
    });
    

これはうまくいくかもしれない:

expect($("#message_div").css("display")).toBe("none");

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

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

これらの回答は、私が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
    }
});


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

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

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


プレーンな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. フレームワークを必要としない


両方をチェックする必要があります...表示と可視性:

if ($(this).css("display") == "none" || $(this).css("visibility") == "hidden") {
    // The element is not visible
} else {
    // The element is visible
}

$(this).is(":visible")をチェックすると、jQueryは両方のものを自動的にチェックします。


何かが目に見えるかどうかを確認するときに、すぐにすぐに行き、それで他の何かをするつもりです。 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" });

例:

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


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

$(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 (this.hidden === false) {
    // Your code
}

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


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

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

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

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

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

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

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


結局のところ、例は私に合っていないので、私は自分自身を書いた。

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

a)文書が隠されていないかどうかを確認する

b)要素の幅/高さ/不透明度がゼロかdisplay:noneされているかどうかをチェックするdisplay:none / visibility:hiddenインラインスタイルでvisibility:hiddenにする

c)他の要素(および全ての祖先、例: overflow:hidden /スクロール/ enotherの上の1要素)または画面の端によって隠されていない要素の中心(すべてのピクセル/コーナーをテストするよりも速いため)

d)要素の幅/高さ/不透明度が0であるか、またはdisplay:noneされているかをチェックしdisplay:none / visibility:計算されたスタイルで非表示(すべての祖先)

テスト済み

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仮想マシン)、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

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

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

または、以下もsamです.jQueryセレクターを変数に保存すると、複数回必要なときにパフォーマンスが向上します。

var $book = $('#book')

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

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

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

働くフィドル


質問は単一の要素を参照するので、このコードはより適切かもしれません:

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

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

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


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


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表示されているとdiv2ます:visible not。 しかし、上記のことは、多くの場合、特に、隠された親にエラーdivがあるかどうかを調べる必要がある場合に便利です。


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




visibility