Equivalente di jQuery .hide () per impostare la visibilità: nascosto


341

In jQuery ci sono .hide()e .show()metodi che definiscono l' display: noneimpostazione CSS .

Esiste una funzione equivalente che configurerebbe l' visibility: hiddenimpostazione?

So che posso usare .css()ma preferisco alcune funzioni simili .hide()o simili . Grazie.


2
Puoi implementare il tuo basato su.toggle()
zerkms l'

Sono anche un fan del metodo toggleClass () di jQuery per questo :) jqueryui.com/toggleClass Sentiti libero di dare un'occhiata all'esempio che ho condiviso nella mia risposta sotto stackoverflow.com/a/14632687/1056713
Chaya Cooper

Risposte:


427

Potresti creare i tuoi plugin.

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

Se vuoi sovraccaricare l'originale jQuery toggle(), che non ti consiglio ...

!(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 Dovresti ombreggiare toggle()che potrebbe rompere altri script. Se lo si desidera, è possibile aggiungere un ulteriore argomento toggle()per specificare se è necessario attivare visibilityo displaydisattivare. Userei solo quello personalizzato nel mio ultimo esempio, comunque. :)
alex

Potresti pubblicare un esempio su come supportare parametri aggiuntivi di show(velocità, attenuazione, richiamata)?
Georg

11
È superfluo se lo guardi in quel modo, ma c'è uno scopo. Se questo è concatenato a un altro script con un (function() { })()o simile, l'ASI non si avvia perché sembra una chiamata di funzione. Prova questo , quindi rimuovi il !.
alex

1
@NoBugs Inserimento automatico di punti e virgola. Ho scritto un post sul blog qui.
alex

1
@VishalSakaria Non è davvero un termine ben definito per quanto ne so, quindi dovrebbe andare bene usarlo qui.
alex,

103

Non ce n'è uno integrato ma potresti scriverne uno abbastanza facilmente:

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

Puoi quindi chiamarlo così:

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

Ecco un esempio funzionante .


1
Buon punto, solo una forza dell'abitudine. Grazie. +1 alla risposta di alex!
James Allardice

Solo curioso, che senso ha avvolgere queste due funzioni nel (function($) {...}(jQuery));wrapper? Non ho mai definito le mie funzioni in jQuery prima, ho sempre definito le funzioni in JavaScript.
VoidKing

2
@VoidKing - È solo la "best practice" per i plugin jQuery come da documentazione. Ti consente di utilizzare l' $identificatore all'interno della funzione, anche se si riferisce a qualcos'altro nell'ambito di appartenenza.
James Allardice

jQuery in realtà ha un metodo toggleClass () incorporato per questo :) jqueryui.com/toggleClass Sentiti libero di dare un'occhiata all'esempio che ho condiviso nella mia risposta sotto stackoverflow.com/a/14632687/1056713
Chaya Cooper

55

Un modo ancora più semplice per farlo è usare il metodo toggleClass () di jQuery

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
Mi piace questo approccio. È meno autonomo perché richiede un foglio di stile separato, ma aiuta a mantenere tutte le informazioni di stile nei fogli di stile a cui dovrebbe appartenere. Se si desidera disabilitare la visibilità, è possibile modificare un tag CSS in un unico posto anziché modificare tutto il codice js.
vaughan,

19
Per coloro che usano bootstrap, questa classe si chiama invisibile.
user239558,

25

Se hai solo bisogno della funzionalità standard di hide solo con la visibilità: hidden per mantenere il layout attuale puoi usare la funzione di callback di hide per modificare i CSS nel tag. Nascondi documenti in jquery

Un esempio :

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

Questo utilizzerà l'animazione normale normale per nascondere il div, ma al termine dell'animazione si imposta la visibilità su nascosta e la visualizzazione su blocco.

Un esempio: http://jsfiddle.net/bTkKG/1/

So che non volevi la soluzione $ ("# aa"). Css (), ma non hai specificato se fosse perché usando solo il metodo css () perdi l'animazione.


2

Ecco un'implementazione, come funziona $.prop(name[,value])o come $.attr(name[,value])funziona. Se la bvariabile viene riempita, la visibilità viene impostata in base a ciò e thisviene restituita (consentendo di continuare con altre proprietà), altrimenti restituisce valore di visibilità.

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

Esempio:

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

1

Equivalente JS puro per 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

Usiamo return elper soddisfare l' interfaccia fluente "desing pattern".

Ecco un esempio funzionante .


Di seguito fornisco anche un'alternativa ALTAMENTE sconsigliata , che è comunque probabilmente la risposta più "vicina alla domanda":

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

ovviamente questo non implementa jQuery 'ciascuno' (dato nella risposta @JamesAllardice ) perché qui usiamo js puri.

L'esempio di lavoro è qui .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.