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.