2012-03-08 6 views
284

In jQuery, ci sono i metodi .hide() e .show() che imposta l'impostazione CSS display: none.Equivalente di jQuery .hide() per impostare la visibilità: nascosta

Esiste una funzione equivalente che imposta l'impostazione visibility: hidden?

So che posso usare .css() ma preferisco alcune funzioni come .hide() o così. Grazie.

+2

È possibile implementare il proprio Based su '.toggle()' – zerkms

+0

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

risposta

364

È possibile creare i propri 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 si vuole sovraccaricare l'originale jQuery toggle(), che io non 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.

+1

Alex, grazie. Potresti usare la funzione '.toggle()'? – TMS

+0

@Tomas Dovresti mettere in ombra 'toggle()' che potrebbe rompere altri script. Se lo si desidera, è possibile aggiungere un argomento aggiuntivo a 'toggle()' per specificare se 'visibility' o' display' devono essere attivati.Userò solo quello personalizzato nel mio ultimo esempio, comunque. :) – alex

+0

Potresti postare un esempio su come supportare parametri aggiuntivi di 'show' (velocità, easing, callback)? – georg

89

Non c'è una sola incorporata, ma si potrebbe scrivere il proprio 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)); 

È quindi possibile chiamare questo modo:

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

Ecco un working example.

+16

+1 Non è necessario '.each': http://jsfiddle.net/nGhjQ/2/. – pimvdb

+1

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

+0

Solo curioso, che senso inserire queste due funzioni in '(function ($) {...} (jQuery))? Wrapper? Non ho mai definito le mie funzioni in jQuery prima, ho sempre definito le funzioni nel diritto JavaScript. – VoidKing

19

Se è necessaria solo la funzionalità standard di nascondere solo con visibilità: nascosto per mantenere il layout corrente è possibile utilizzare la funzione di richiamata di hide per modificare il css nel tag. Hide docs in jquery

Un esempio:

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

Questa utilizzerà l'animazione freddo normale per nascondere il div, ma dopo l'arrivo di animazione si impostare la visibilità di nascosto e visualizzare bloccare.

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

So che non ordinavi i $ ("# AA") css() soluzione, ma non è stato specificato se fosse perché usando solo il css() il metodo si perde la animazione.

48

Un modo ancora più semplice per farlo è quello di utilizzare toggleClass() il metodo 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 autosufficiente perché richiede un foglio di stile separato, ma aiuta a mantenere tutte le informazioni di stile nei fogli di stile che è il posto a cui dovrebbe appartenere. Se si desidera disabilitare la visibilità, è possibile modificare un tag css in un posto anziché modificare tutto il codice js. – vaughan

+17

Per quelli che usano il bootstrap, questa classe è chiamata invisibile. – user239558

Problemi correlati