jQuery & CSS - Supprimer / Ajouter un affichage: aucun

122

J'ai un div avec cette classe:

.news{
  width:710px; 
  float:left;
  border-bottom:1px #000000 solid;
  font-weight:bold;
  display:none;
}

Et je voudrais avec certaines méthodes jQuery supprimer cet affichage: aucun; (donc le div sera affiché) et ensuite l'ajouter à nouveau (donc le div sera ombré).

Comment puis-je le faire? À votre santé

Markzzz
la source
3
jQuery $(".news").show()? "donc la div sera ombragée" ... vous voulez dire qu'elle disparaîtra ??
JCOC611
Ouais ça $(".news").show()marche! Le même $(".news").hide()!!! Merci;)
markzzz
2
Vous pouvez condenser cela en une seule déclaration avec$('.news').toggle();
Eli Gundry

Réponses:

209

Pour cacher le div

$('.news').hide();

ou

$('.news').css('display','none');

et pour montrer div:

$('.news').show();

ou

$('.news').css('display','block');
Snehal Ghumade
la source
2
$ ('. news'). css ('afficher', 'bloquer'); travaillé pour moi! merci Shehal!
Jitesh Sojitra
Comment réinitialiser le style «affichage» sur ce qui a été défini dans CSS en premier lieu et non sur «bloquer»?
ed22
73

jQuery vous fournit:

$(".news").hide();
$(".news").show();

Vous pouvez ensuite facilement afficher et masquer le ou les éléments.

JCOC611
la source
38
Le problème est, .show()ne supprime ni ne supprime display: none, mais met à la place display: blockou en inlinefonction de l'élément, et il peut casser la mise en page si l'élément utilise un displaystyle inhabituel .
lolesque
@lolesque J'ai trouvé un simple «hack» pour résoudre ce problème. Utilisez simplement element{display:none;}dans votre css, mais dans votre js, utilisez également element.hide()en même temps. Cela permettra à la show()fonction de fonctionner.
Jarrod
16

Alors, laissez-moi vous donner un exemple de code:

<div class="news">
Blah, blah, blah. I'm hidden.
</div>

<a class="trigger">Hide/Show News</a>

Le lien sera le déclencheur pour afficher le div lorsque vous cliquez dessus. Donc votre Javascript sera:

$('.trigger').click(function() {
   $('.news').toggle();
});

Il est presque toujours préférable de laisser jQuery gérer le style pour masquer et afficher les éléments.

Edit: Je vois que les gens ci-dessus recommandent d'utiliser .showet .hidepour cela. .togglevous permet de faire les deux avec un seul effet. Alors c'est cool.

Eli Gundry
la source
Bonne idée pour montrer la togglefonction. Plusieurs fois, si vous devez cliquer sur quelque chose et l'afficher, vous souhaitez que la fonctionnalité le masque également.
user3267755
16

En JavaScript:

getElementById("id").style.display = null;

Dans jQuery:

$("#id").css("display","");
Sergio
la source
J'ai dû utiliser $ ("# id"). Css ('display', ''); pour le faire fonctionner correctement en supprimant le style en ligne pour "affichage"
TrippinBilly
1
Moi aussi @TrippinBill (sous Mac Firefox 43) - j'ai soumis une modification. Celles-ci semblent être le seul moyen de supprimer la propriété CSS plutôt que de l'inverser. Cela lui permet d'être remplacé par des affectations CSS plus larges, contrairement à son annulation.
Chris
11

Utilisez la bascule pour afficher et masquer.

$('#mydiv').toggle()

Vérifiez l'exemple de travail sur http://jsfiddle.net/jNqTa/

Hussein
la source
1
Notez que .toggle()c'est obsolète depuis jQuery 1.9.
TylerH
@TylerH Je ne vois pas une note pour voir qu'elle est obsolète?
Paul
@Paul Désolé, je pensais à l'événement toggle api.jquery.com/toggle-event
TylerH
8

Je suggère d'ajouter une classe pour afficher / masquer les éléments:

.hide { display:none; }

puis utilisez .toggleClass () de jquery pour afficher / masquer l'élément:

$(".news").toggleClass("hide");
rubiii
la source
7

La seule façon de supprimer un "display: none" en ligne via le css-api de jQuery est de le réinitialiser avec la chaîne vide ( nullne fonctionne PAS btw !!).

Selon le document jQuery, c'est la manière générale de "supprimer" une propriété de style en ligne une fois définie.

$("#mydiv").css("display","");

ou

$("#mydiv").css({display:""});

devrait faire l'affaire correctement.

IMHO il y a une méthode manquante dans jQuery qui pourrait être appelée "unhide" ou "révéler" qui au lieu de simplement définir une autre propriété de style en ligne annule correctement la valeur d'affichage comme décrit ci-dessus. Ou peut-être hide()devrait stocker la valeur initiale en ligne et show()devrait restaurer cela ...

chaussures
la source
6

Les fonctions .show () et .hide () de jQuery sont probablement votre meilleur choix.

Dave enfant
la source
5

Vous ne nous donnez pas beaucoup d'informations mais en général, cela pourrait être une solution:

$("div.news").css("display", "block");
Yorian
la source
De quelles autres informations avez-vous besoin? Je pense que c'est une question simple, n'est-ce pas? Quoi qu'il en soit, j'ai résolu en utilisant $(".news").show()et $(".news").hide();)
markzzz
Une question obieuse est: y a-t-il plus de div.news sur la page. Dans ce cas, cela les afficherait tous.
Yorian
4

Pour une raison quelconque, la bascule ne fonctionnait pas pour moi et j'ai reçu l'erreur uncaught type error toggle is not a functionlors de l'inspection de l'élément dans le navigateur. J'ai donc utilisé le code suivant et cela a commencé à fonctionner pour moi.

$(".trigger").click(function () {
    $('.news').attr('style', 'display:none');
})

Fichier de script jquery utilisé jquery-2.1.3.min.js.

SRI
la source
3

Si vous avez beaucoup d'éléments que vous aimeriez .hide()ou .show(), vous allez gaspiller beaucoup de ressources pour faire ce que vous voulez - même si vous utilisez .hide(0)ou .show(0)- le paramètre 0 est la durée de l'animation.

Contrairement à Prototype.js .hide() et aux .show()méthodes qui utilisaient uniquement pour manipuler l'attribut d'affichage de l'élément, l'implémentation de jQuery est plus complexe et déconseillée pour un grand nombre d'éléments.

Dans ce cas, vous devriez probablement essayer .css('display','none')de cacher et .css('display','')d'afficher

.css('display','block') doit être évité, en particulier si vous travaillez avec des éléments en ligne, des lignes de tableau (en fait des éléments de tableau), etc.

nmirceac
la source
1

Considérant que le commentaire de lolesque est la meilleure réponse, vous pouvez ajouter un attribut ou une classe pour afficher / masquer des éléments avec des propriétés d'affichage qui diffèrent de ce qu'il a normalement, si votre site a besoin d'une compatibilité descendante, je suggérerais de créer une classe et de l'ajouter / de la supprimer pour afficher / afficher l'élément

.news-show {
display:inline-block;
}

.news-hide {
display:none;
}

Remplacez inline-block par votre méthode d'affichage préférée de votre choix et utilisez jquerys addclass https://api.jquery.com/addclass/ et removeclass https://api.jquery.com/removeclass/ au lieu de show / hide, si en arrière la compatibilité n'est pas un problème, vous pouvez utiliser des attributs comme celui-ci.

.news[data-news-visible=show] {
display:inline-block;
}

.news[data-news-visible=hide] {
display:none;
}

Et utilisez jquerys attr () http://api.jquery.com/attr/ pour afficher et masquer l'élément.

Quelle que soit la méthode que vous préférez, cela vous permet d'implémenter facilement des animations css3 lorsque vous affichez / masquez des éléments de cette façon

Anders M.
la source
0

Utiliser des show()ajouts display:blockà la place de display:hidequi pourrait casser des choses.

Pour éviter cela, vous pouvez avoir une classe avec propriété display:noneet basculer cette classe pour cet élément avec toggleClass().

$("button").on('click', function(event){  $("div").toggleClass("hide"); });
.hide{
   display:none;
}

div{
   width:40px;
   height:40px;
   background:#000;
   margin-bottom:20px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div></div>
<button>Toggle Box</button>

Aucune des réponses n'a mentionné cela.

Hackinet
la source