Görünürlüğü ayarlamak için jQuery .hide () öğesine eşdeğerdir: gizli


340

JQuery olarak, orada .hide()ve .show()CSS ayarlar yöntemleri display: noneayarı.

visibility: hiddenAyarı yapacak eşdeğer bir işlev var mı ?

Kullanabileceğimi biliyorum .css()ama böyle bir işlevi tercih ediyorum .hide(). Teşekkürler.


2
Kendinizi temel alarak uygulayabilirsiniz.toggle()
zerkms

Ben de bunun için jQuery'nin toggleClass () yönteminin hayranıyım :) jqueryui.com/toggleClass Aşağıdaki cevabımda paylaştığım örneğe göz atmaktan çekinmeyin stackoverflow.com/a/14632687/1056713
Chaya Cooper

Yanıtlar:


426

Kendi eklentilerinizi yapabilirsiniz.

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

Önermediğim orijinal jQuery'yi aşırı yüklemek istiyorsanız 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()Diğer komut dosyalarını bozabilecek gölgeleme yapmanız gerekir . Eğer isteseydin, ekstra argüman ekleyebilir toggle()belirtmek için visibilityveya displaytoggled edilmelidir. Ancak son örneğimde özel olanı kullanardım. :)
alex

Ek parametrelerin show(hız, hareket hızı, geri arama) nasıl destekleneceğine ilişkin bir örnek gönderebilir misiniz ?
georg

11
Bu şekilde bakarsanız saçma, ama bir amaç var. Bu, (function() { })()veya benzeri bir komut dosyasına birleştirilirse , ASI devreye girmez çünkü bir işlev çağırma gibi görünür. Deneyin bu , o zaman kaldırın !.
alex

1
@NoBugs Otomatik Yarı Kolon Ekleme. Buraya bir blog yazısı yazdım .
alex

1
@VishalSakaria Bildiğim kadarıyla gerçekten iyi tanımlanmış bir terim değil, bu yüzden burada kullanmak uygun olmalı.
alex

103

Yerleşik bir tane yok ama kendinizinkini kolayca yazabilirsiniz:

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

Daha sonra bunu şöyle çağırabilirsiniz:

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

İşte çalışan bir örnek .


1
İyi bir nokta, sadece bir alışkanlık gücü. Teşekkürler. Alex'in cevabına +1!
James Allardice

Sadece merak ediyorum, bu iki işlevi (function($) {...}(jQuery));sargıya sarmanın anlamı nedir? Daha önce hiç jQuery kendi fonksiyonları tanımlamak, ben her zaman sadece düz JavaScript fonksiyonları tanımladı.
VoidKing

2
@VoidKing - Bu, dokümanlara göre jQuery eklentileri için "en iyi uygulama" dır. $Üst kapsamdaki başka bir şeye atıfta bulunsa bile , tanımlayıcıyı işlevin içinde kullanmanıza olanak tanır .
James Allardice

jQuery aslında bir toggleClass () bunun için yönteminde inşa etti :) jqueryui.com/toggleClass aşağıda cevabım paylaşılan örnek kontrol etmek hissedin ücretsiz stackoverflow.com/a/14632687/1056713
Chaya Cooper

55

Bunu yapmanın daha basit bir yolu, jQuery'nin toggleClass () yöntemini kullanmaktır

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
Bu yaklaşımı seviyorum. Ayrı bir stil sayfası gerektirdiği için daha az bağımsızdır, ancak tüm stil bilgilerini ait olması gereken stil sayfalarında tutmaya yardımcı olur. Görünürlüğü devre dışı bırakmak isterseniz, tüm js kodunuzu değiştirmek yerine bir yerde bir css etiketini değiştirebilirsiniz.
vaughan

19
Bootstrap kullananlar için bu sınıfa görünmez denir.
user239558

25

Gizlemenin yalnızca işlevselliği ile yalnızca standart işlevselliğe ihtiyacınız varsa: gizli, geçerli düzeni korumak için etiketteki css değerini değiştirmek için hide'ın geri arama işlevini kullanabilirsiniz. Jquery'deki dokümanları gizle

Bir örnek :

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

Bu, div'ı gizlemek için normal harika animasyonu kullanır, ancak animasyon bittikten sonra görünürlüğü gizli olarak ve engellenecek şekilde ayarlarsınız.

Bir örnek: http://jsfiddle.net/bTkKG/1/

$ ("# Aa"). Css () çözüm istemediğini biliyorum, ama sadece css () yöntemini kullanarak animasyonu kaybettiğiniz için olup olmadığını belirtmediniz.


2

İşte bir uygulama, neye benzeyen $.prop(name[,value])veya $.attr(name[,value])işlev gören. Eğer bdeğişken doldurulur, görüş buna göre ayarlanır ve thisaksi takdirde görüş değerini verir, (diğer özellikleri ile devam etmesine izin) döndürülür.

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

Misal:

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

1

JQuery hide () / show () için saf JS eşdeğeri:

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

Biz akıcı arayüzü "tasarım deseni" return elkarşılamak için kullanın .

İşte çalışan örnek .


Aşağıda ben de muhtemelen daha "soruya yakın" cevap olan ÇOK tavsiye edilmeyen alternatif sağlar:

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

Tabii ki bu, jQuery 'each' ( @JamesAllardice cevabında verilen) uygulamıyor çünkü burada saf js kullanıyoruz.

Çalışma örneği burada .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.