Odpowiednik jQuery .hide (), aby ustawić widoczność: ukryty

340

W jQuery istnieją .hide()i .show()metody, które ustawiają display: noneustawienie CSS .

Czy istnieje równoważna funkcja, która ustawiłaby visibility: hiddenustawienie?

Wiem, że mogę używać, .css()ale wolę jakąś taką funkcję .hide(). Dzięki.

TMS
źródło
2
Możesz wdrożyć własne w oparciu o.toggle()
zerkms
Jestem również fanem metody toggleClass () jQuery'ego :) jqueryui.com/toggleClass Zapraszam do zapoznania się z przykładem udostępnionym w mojej odpowiedzi poniżej stackoverflow.com/a/14632687/1056713
Chaya Cooper

Odpowiedzi:

426

Możesz tworzyć własne wtyczki.

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

Jeśli chcesz przeładować oryginalną wersję jQuery toggle(), której nie polecam ...

!(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 .

alex
źródło
@Tomas Będziesz musiał ukryć cień, toggle()który mógłby złamać inne skrypty. Jeśli chcesz, możesz dodać dodatkowy argument, aby toggle()określić, czy visibilitylub displaypowinna być przełączana. Chciałbym jednak użyć niestandardowego w moim ostatnim przykładzie. :)
alex
Czy możesz podać przykład, w jaki sposób obsługiwać dodatkowe parametry show(prędkość, łagodzenie, oddzwanianie)?
Georg
11
Jest to zbyteczne, jeśli spojrzysz na to w ten sposób, ale jest cel. Jeśli zostanie to połączone z innym skryptem z (function() { })()podobnym skryptem , ASI nie uruchomi się, ponieważ wygląda jak wywołanie funkcji. Spróbuj tego , a następnie usuń !.
Alex
1
@NoBugs Automatyczne wstawianie średnika. Napisałem tutaj post na blogu .
alex
1
@VishalSakaria Z tego, co wiem, nie jest to dobrze zdefiniowany termin, więc używanie go tutaj powinno być w porządku.
alex
103

Nie ma jednego wbudowanego, ale możesz łatwo napisać własny:

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

Następnie możesz to tak nazwać:

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

Oto działający przykład .

James Allardice
źródło
1
Dobra uwaga, tylko siła nawyku. Dzięki. +1 do odpowiedzi Alexa!
James Allardice,
Ciekawe, jaki jest sens owijania tych dwóch funkcji w (function($) {...}(jQuery));opakowanie? Nigdy wcześniej nie definiowałem własnych funkcji w jQuery, zawsze tylko definiowałem funkcje w prostym JavaScript.
VoidKing
2
@VoidKing - To tylko „najlepsza praktyka” dla wtyczek jQuery zgodnie z dokumentacją. Pozwala na użycie $identyfikatora wewnątrz funkcji, nawet jeśli odnosi się do czegoś innego w zakresie nadrzędnym.
James Allardice
jQuery ma wbudowaną metodę toggleClass () do tego :) jqueryui.com/toggleClass Zapraszam do zapoznania się z przykładem, który udostępniłem w odpowiedzi poniżej stackoverflow.com/a/14632687/1056713
Chaya Cooper
55

Jeszcze prostszym sposobem na to jest użycie metody toggleClass () jQuery'ego

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");
    });
});
Chaya Cooper
źródło
1
Lubię to podejście. Jest mniej samodzielny, ponieważ wymaga osobnego arkusza stylów, ale pomaga zachować wszystkie informacje o stylu w arkuszach stylów, do których powinien należeć. Jeśli chcesz wyłączyć widoczność, możesz zmienić tag css w jednym miejscu zamiast zmieniać cały kod js.
vaughan
19
Dla tych, którzy używają bootstrap, ta klasa nazywa się niewidoczna.
user239558,
25

Jeśli potrzebujesz tylko standardowej funkcjonalności hide tylko z widocznością: ukryty, aby zachować obecny układ, możesz użyć funkcji wywołania ukrytego, aby zmienić css w znaczniku. Ukryj dokumenty w jquery

Przykład :

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

Spowoduje to użycie normalnej fajnej animacji do ukrycia div, ale po zakończeniu animacji ustawisz widoczność na ukrytą, a wyświetlanie na blok.

Przykład : http://jsfiddle.net/bTkKG/1/

Wiem, że nie chciałeś rozwiązania $ ("# aa"). Css (), ale nie określiłeś, czy jest tak, ponieważ używając tylko metody css () tracisz animację.

h3ct0r
źródło
2

Oto jedna implementacja, która działa jak $.prop(name[,value])lub $.attr(name[,value])działa. Jeśli bzmienna jest wypełniona, widoczność jest ustawiana zgodnie z tym i thisjest zwracana (pozwalając kontynuować z innymi właściwościami), w przeciwnym razie zwraca wartość widoczności.

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

Przykład:

$("#result").visible(true).on('click',someFunction);
if($("#result").visible())
    do_something;
Teet Kalm
źródło
1

Odpowiednik czystego JS dla jQuery hide () / show ():

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

Używamy return elze względu na płynny interfejs „wzorca projektowego”.

Oto działający przykład .


Poniżej podaję również WYSOKIE NIE polecaną alternatywę, która jednak jest prawdopodobnie bardziej „zbliżona do pytania” odpowiedź:

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

oczywiście nie implementuje jQuery 'each' (podany w @JamesAllardice odpowiedzi ), ponieważ używamy tutaj czystego js.

Przykładem roboczym jest tutaj .

Kamil Kiełczewski
źródło