可視性を設定するjQuery .hide()と同等:非表示


340

jQueryには、CSS 設定を設定するメソッド.hide().show()メソッドがありますdisplay: none

visibility: hidden設定を行う同等の機能はありますか?

使用できることはわかっています.css()が、ある程度の機能が好き.hide()です。ありがとう。


2
に基づいて独自に実装できます.toggle()
zerkms

また、私は、このためのjQueryのtoggleClass()メソッド:)のファンだjqueryui.com/toggleClass フィール私は以下の私の答えで共有例をチェックアウトして自由stackoverflow.com/a/14632687/1056713を
茶屋クーパー

回答:


426

独自のプラグインを作成できます。

jQuery.fn.visible = function() {
    return this.css('visibility', 'visible');
};

jQuery.fn.invisible = function() {
    return this.css('visibility', 'hidden');
};

jQuery.fn.visibilityToggle = function() {
    return this.css('visibility', function(i, visibility) {
        return (visibility == 'visible') ? 'hidden' : 'visible';
    });
};

元のjQueryをオーバーロードしたい場合toggle()は、お勧めしません...

!(function($) {
    var toggle = $.fn.toggle;
    $.fn.toggle = function() {
        var args = $.makeArray(arguments),
            lastArg = args.pop();

        if (lastArg == 'visibility') {
            return this.visibilityToggle();
        }

        return toggle.apply(this, arguments);
    };
})(jQuery);

jsFiddle


@Tomas toggle()他のスクリプトを壊す可能性のあるシャドウを作成する必要があります。あなたが望むならば、あなたはする追加の引数を追加することができますtoggle()かどうかを指定するvisibilitydisplayをトグルする必要があります。ただし、最後の例ではカスタムのものを使用します。:)
アレックス

show(速度、イージング、コールバック)の追加パラメーターをサポートする方法の例を投稿できますか?
georg

11
そんな風に見れば無意味ですが、目的があります。これが(function() { })()や類似のスクリプトと連結されている場合、関数呼び出しのように見えるため、ASIは起動しません。これを試しから、取り外してください!
アレックス

1
@NoBugs自動セミコロン挿入。私はそれについてここにブログ投稿を書きました。
アレックス、2013

1
@VishalSakaria私が知る限り、これは明確に定義された用語ではないため、ここで使用しても問題ありません。
アレックス

103

組み込みのものはありませんが、非常に簡単に独自のものを作成できます。

(function($) {
    $.fn.invisible = function() {
        return this.each(function() {
            $(this).css("visibility", "hidden");
        });
    };
    $.fn.visible = function() {
        return this.each(function() {
            $(this).css("visibility", "visible");
        });
    };
}(jQuery));

その後、次のように呼び出すことができます。

$("#someElem").invisible();
$("#someOther").visible();

これが実際の例です。


1
良い点、ただの習慣の力。ありがとう。アレックスの答えに+1!
James Allardice

これらの2つの関数を(function($) {...}(jQuery));ラッパーでラップする意味は何ですか?自分の関数をjQueryで定義したことがないので、関数をストレートJavaScriptで定義しただけです。
VoidKing 2013年

2
@VoidKing-これは、ドキュメントによるjQueryプラグインの「ベストプラクティス」にすぎません。$親スコープ内の別のものを参照している場合でも、関数内で識別子を使用できます。
James Allardice 2013年

jQueryのは、実際にtoggleClass()は、このための方法が組み込まれています:) jqueryui.com/toggleClass 私は以下の私の答えで共有例チェックアウトしてフィールが自由stackoverflow.com/a/14632687/1056713
茶屋クーパー

55

これを行うさらに簡単な方法は、jQueryのtoggleClass()メソッドを使用することです

CSS

.newClass{visibility: hidden}

HTML

<a href="#" class=trigger>Trigger Element </a>
<div class="hidden_element">Some Content</div>

JS

$(document).ready(function(){
    $(".trigger").click(function(){
        $(".hidden_element").toggleClass("newClass");
    });
});

1
私はこのアプローチが好きです。別のスタイルシートを必要とするため、自己完結型ではありませんが、スタイルシートに属する必要があるすべてのスタイル情報をスタイルシートに保持するのに役立ちます。可視性を無効にしたい場合は、すべてのjsコードを変更する代わりに、cssタグを1か所で変更できます。
ヴォーン14

19
ブートストラップを使用する場合、このクラスは不可視と呼ばれます。
user239558 14

25

現在のレイアウトを維持するために、visibility:hiddenでのみ非表示の標準機能のみが必要な場合は、非表示のコールバック関数を使用して、タグのcssを変更できます。jqueryでドキュメントを非表示にする

例 :

$('#subs_selection_box').fadeOut('slow', function() {
      $(this).css({"visibility":"hidden"});
      $(this).css({"display":"block"});
});

これは通常のクールなアニメーションを使用してdivを非表示にしますが、アニメーションが終了したら、表示を非表示に設定し、表示をブロックします。

例:http : //jsfiddle.net/bTkKG/1/

$( "#aa")。css()ソリューションが必要でなかったのはわかっていますが、css()メソッドのみを使用するとアニメーションが失われるため、そうであるかどうかは指定しませんでした。


2

ここのようにどのような作品一の実施、だ$.prop(name[,value])または$.attr(name[,value])機能。b変数が入力されている場合、可視性はそれに応じて設定され、this返されます(他のプロパティを続行できるようにします)。それ以外の場合は、可視性の値を返します。

jQuery.fn.visible = function (b) {
    if(b === undefined)
        return this.css('visibility')=="visible";
    else {
        this.css('visibility', b? 'visible' : 'hidden');
        return this;
    }
}

例:

$("#result").visible(true).on('click',someFunction);
if($("#result").visible())
    do_something;

1

jQuery hide()/ show()に相当する純粋なJS

function hide(el) {
    el.style.visibility = 'hidden';    
    return el;
}

function show(el) {
    el.style.visibility = 'visible';    
    return el;
}

hide(document.querySelector(".test"));
// hide($('.test')[0])   // usage with jQuery

流暢なインターフェース「デザインパターン」return elを満たすために使用しています

こちらが動作例です。


以下では、非常に非推奨の代替案も示しますが、これはおそらく「質問に近い」回答です。

HTMLElement.prototype.hide = function() {
    this.style.visibility = 'hidden';  
    return this;
}

HTMLElement.prototype.show = function() {
    this.style.visibility = 'visible';  
    return this;
}

document.querySelector(".test1").hide();
// $('.test1')[0].hide();   // usage with jQuery

もちろん、ここでは純粋なjsを使用しているため、jQueryの 'each'(@JamesAllardiceの回答で与えられます)は実装していません。

動作例はこちらです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.