2017-08-16 2 views
0

Je travaille sur une application web d'une seule page, j'ai donc beaucoup de div HTML avec les règles CSS associées qui définissent "display: none; " En fonction de ce que fait l'utilisateur, j'utilise quelque chose comme $ ('# some-id'). Css ('display', 'block') pour régler l'affichage sur autre chose que "none". Cela rend la div visible, et tout va bien.Comment faire jquery.show() afficher autre chose que 'block'

Mais c'est moche, parce que mon code JavaScript doit savoir quelle valeur utiliser pour "afficher" pour chaque div. Habituellement, c'est "bloc", "inline", ou "grille". Cette information devrait être dans le CSS, pas dans le JavaScript.

J'ai essayé d'utiliser jquery.show() et jquery.hide(), mais l'affichage est toujours défini sur "block" s'il commence par "none". J'espérais qu'il y avait un moyen en CSS pour indiquer la valeur d'une div pour quand ce n'est pas "aucun". Mais je n'ai rien trouvé de tel.

Existe-t-il une solution plus élégante?

+2

qu'en est-il de '.addClass (...)' et '.removeClass (...)'? Ensuite, chaque classe peut avoir les valeurs 'display' que vous souhaitez – ochi

+1

Vous voudrez probablement partager avec nous ce que vous pensez que vous pourriez vouloir utiliser. Comme vous pouvez le voir, certaines personnes ont des idées, et elles sont rabaissées parce que les autres ne voient pas la même chose. Ce n'est pas vraiment un bon site pour demander des opinions. –

+0

Impossible de reproduire -> https://jsfiddle.net/zkqwjc9k/ – adeneo

Répondre

1

Une solution plus élégante serait travailler avec des classes.

Comme vous l'avez dit, les informations display se trouvent dans votre fichier CSS. La solution la plus simple et la plus lisible consiste à ajouter une classe .hidden aux éléments qui doivent être masqués.

Dans votre fichier CSS:

.hidden {display: none;} 

classe Toggle dans jQuery:

// Equivalent of hide(): 
$(el).addClass("hidden") 

// Equivalent of show(): 
$(el).removeClass("hidden") 

Vous ne devez pas ajouter quoi que ce soit plus. Pas de règles CSS supplémentaires ou quoi que ce soit. Si vous travaillez avec des règles spécifiques, vous pouvez ajouter !important. Je pense que c'est l'un de ces cas où son utilisation est justifiée, i.e. .:

.hidden {display: none !important;} 

Maintenant, tous les éléments se seront cachés s'ils ont la classe hidden, même si leur sélection est plus spécifique.

+0

D'abord, j'apprécie vraiment toutes les entrées. Eh bien, sauf pour l'inévitable "vous avez posé une mauvaise question" commentaire. J'accepte cette réponse, car elle semble être la plus propre. C'est parce que les informations de style restent dans CSS où elles appartiennent. C'est mieux que d'avoir HTML/JS qui sait que la valeur "display" correcte pour un certain div est "grid". Ce n'est pas parfait, car le HTML a toujours besoin de savoir qu'un certain div va commencer à être caché. Ce serait bien de garder cette information en CSS. Mais je pense que c'est le meilleur que nous pouvons faire avec la version actuelle de CSS. – rpd

0

Vous pouvez simplement utiliser directement

$(whatever).css('display', 'what you want'); 

Retrait de l'attribut de style en ligne serait quelque chose comme l'autre question: Use jQuery to remove an inline style

0

Vous pouvez peut-être essayer l'initialisation css pour récupérer l'affichage d'origine de l'élément (inline ou Block).

$('#some-id').css('display', 'initial'); 
+0

La définition d'une propriété non héritée comme 'display' à' inherit' n'a pas beaucoup de sens. 'display: initial' pourrait être plus approprié, bien que [cette valeur ne soit pas supportée par IE] (http://caniuse.com/#feat=css-initial-value). – duskwuff

+0

Merci pour votre commentaire. Si vous définissez un élément d'affichage non compatible sur l'ancien IE, l'IE revient au type d'affichage initial. –

0
$('#element').show(); 
%('#element').css('display','inline') 

ou

$('#element').addClass('show'); 

dans stylesheet:

.show{ 
    display: inline; 
} 

Ou devrait fonctionner correctement. Je ne connais pas d'autre moyen.