Je ne suis pas sûr que ce soit ce que tu voulais. Vous vouliez le remplacer, ce qui, comme déjà souligné, est facilement réalisé par $('#element').css('display', 'inline').
Ce que je cherchais, c'était une solution pour SUPPRIMER complètement le style en ligne. J'en ai besoin pour un plugin que j'écris où je dois temporairement définir certaines valeurs CSS en ligne, mais je veux les supprimer plus tard; Je veux que la feuille de style reprenne le contrôle. Je pourrais le faire en stockant toutes ses valeurs d'origine, puis en les remettant en ligne, mais cette solution me semble beaucoup plus propre.
Définir la valeur d'une propriété de style sur une chaîne vide - par exemple $('#mydiv').css('color', '')- supprime cette propriété d'un élément si elle a déjà été directement appliquée, que ce soit dans l'attribut de style HTML, via la .css()méthode de jQuery ou via la manipulation DOM directe de la propriété de style. Cependant, il ne supprime pas un style qui a été appliqué avec une règle CSS dans une feuille de style ou un <style>élément.
@ximi - Merci mec. J'y ai pensé, et j'ai décidé que ce n'était pas une telle perte de temps. Il pourrait être adopté pour vérifier les styles en ligne, pour lesquels il n'y a actuellement pas de prise en charge dans jQuery ( .css('property')vous donne la valeur, mais il ne vous dit pas s'il provient d'un style en ligne).
Joseph Silber
Je suis arrivé à la même conclusion indépendamment - une chaîne vide semble faire exactement ce que nous voulons. Ce n'est pas officiellement documenté dans l'API, mais j'espère qu'il continuera à fonctionner.
Jon z
@ Jonz - Il est officiellement documenté (bien que je ne sache pas quand il a été ajouté; je ne me souviens pas l'avoir vu là-bas lorsque j'ai posté cela à l'origine). De plus, je ne pense pas que jQuery fasse quoi que ce soit ici. L' styleobjet natif semble se comporter de la même manière. J'ai modifié ma réponse avec cette information.
Joseph Silber
Est-ce que cela fonctionne avec des choses comme la famille de polices, ou est-ce que - gâcher l'expression régulière?
TMH
4
@mosh - Pourquoi n'utilisez-vous pas simplement $('#element').css('display', '')?
Joseph Silber
158
.removeAttr("style") pour se débarrasser de la balise de style entière ...
.attr("style") pour tester la valeur et voir si un style en ligne existe ...
.attr("style",newValue) pour le régler sur autre chose
Cela affectera tous les styles en ligne, pas seulement display.
SLaks
1
ça sonne bien, essayez-le et faites-le moi savoir, je n'utilise jamais les styles en ligne normalement si heureux d'effacer tous les styles en ligne
Haroldo
11
@Slaks bien, c'est ce que je voulais dire par "se débarrasser de la balise de style entière";)
heisenberg
Salut. Existe-t-il un moyen de vérifier si un «style» a été appliqué au ... $ («*»), à partir de n'importe quelle source comme un style en ligne, en attribuant un style comme police, b, fort, fichier css .. avant d'essayer de supprimer / réinitialiser quelque chose ou simplement réinitialiser tout d'un coup?
Milche Patern
Étant donné que la suppression de chaque style en ligne individuellement ne supprime pas l' styleattribut (maintenant vide) , cela mérite tout de même d'être noté.
Brilliand
26
La façon la plus simple de supprimer des styles en ligne (générés par jQuery) serait:
$(this).attr("style","");
Le code en ligne devrait disparaître et votre objet devrait adapter le style prédéfini dans vos fichiers CSS.
@Kobi: Il pose des questions sur n'importe quel style en ligne.
SLaks
euh, quoi? Je ne comprends probablement pas quelque chose. Je pense à <div style="display:block;">, $('div').hide().
Kobi
3
@Kobi: hiderésout un cas particulier de modification des styles en ligne. Cette réponse concerne tous les cas. ( hide/showont également une limitation car deux dont deux valeurs sont basculées. ie aucun-> bloc ou aucun-> en ligne.)
Joel
@Joel: hide/ showse souviendra de l'ancienne valeur de displayet la restaurera correctement.
SLaks
@SLaks: Cool. Cela a dû être ajouté récemment, car je me souviens avoir eu des problèmes avec cela auparavant.
Joel
12
vous pouvez créer un plugin jquery comme celui-ci:
jQuery.fn.removeInlineCss =(function(){var rootStyle = document.documentElement.style;var remover =
rootStyle.removeProperty // modern browser|| rootStyle.removeAttribute // old browser (ie 6-8)returnfunction removeInlineCss(properties){if(properties ==null)returnthis.removeAttr('style');
proporties = properties.split(/\s+/);returnthis.each(function(){for(var i =0; i < proporties.length ; i++)
remover.call(this.style, proporties[i]);});};})();
usage
$(".foo").removeInlineCss();//remove all inline styles
$(".foo").removeInlineCss("display");//remove one inline style
$(".foo").removeInlineCss("color font-size font-weight");//remove several inline styles
Cette réponse contient une astuce très soignée d'une ligne qui est utile même sans jQuery et que peu de développeurs peuvent connaître - l'appel elem.style.removeProperty('margin-left')supprimera juste margin-leftde l' styleattribut (et retournera la valeur de cette propriété). Pour IE6-8, c'est elem.style.removeAttribute().
craigpatik
9
La manière paresseuse (qui incitera les futurs designers à maudire votre nom et à vous assassiner dans votre sommeil):
#myelement {
display: none !important;}
Avertissement: je ne préconise pas cette approche, mais c'est certainement la voie paresseuse.
Si vous souhaitez supprimer une propriété dans un attribut de style - pas simplement la définir sur autre chose - vous utilisez la removeProperty()méthode:
MISE À JOUR:
J'ai créé un violon interactif pour jouer avec les différentes méthodes et leurs résultats. Apparemment, il n'y a pas beaucoup de différence entre set to empty string, set to faux valueet removeProperty(). Ils entraînent tous le même repli - qui est soit une règle CSS pré-donnée, soit la valeur par défaut du navigateur.
d'où le «paresseux»! ne peut pas être arsed pour trouver de quel plugin il s'agit!
Haroldo
4
Je ne sais pas comment vous définissez paresseux, j'ai juste répondu comment je le ferais. Semble logique de résoudre le problème d'origine plutôt que de corriger les choses en dehors du plugin. Je prévois des désordres en le faisant de cette façon.
Josh Stodola
Quelle direction? Si vous modifiez le plugin, vous pouvez rencontrer des problèmes après la mise à jour vers une nouvelle version qui annulera votre modification et gâchera la mise en page. Qui se souviendra dans un an ou deux que vous y avez fait ce petit ajustement? J'essaie toujours de trouver une autre solution que de modifier le code source du plugin
Si vous votez contre quelque chose, veuillez laisser un commentaire.
He Nrik
1
Je suppose que vous avez les downvotes parce que vous n'avez pas répondu à la question posée : "jQuery plugin is applying an inline style (display:block). I'm feeling lazy and want to override it with display:none". Bien que votre texte soit correct, votre code ne résout pas la question.
Fin du codage
Résolu le problème que j'avais. Tnx.
yodalr
0
$("#element").css({ display: "none" });
Au début, j'ai essayé de supprimer le style en ligne dans CSS, mais cela ne fonctionne pas et un nouveau style comme l'affichage: aucun ne sera écrasé. Mais dans JQuery cela fonctionne comme ça.
J'ai eu un problème similaire avec la propriété width. Je ne pouvais pas supprimer le! Important du code, et comme il avait besoin de ce style sur un nouveau modèle, j'ai ajouté un identifiant (modalstyling) à l'élément et ensuite j'ai ajouté le code suivant au modèle:
<scripttype="text/javascript">
$('#modalstyling').css('width','');//Removal of width !important
$('#modalstyling').width('75%');//Set custom width</script>
Réponses:
Mise à jour: bien que la solution suivante fonctionne, il existe une méthode beaucoup plus simple. Voir ci-dessous.
Voici ce que j'ai trouvé, et j'espère que cela vous sera utile - pour vous ou quelqu'un d'autre:
Cela supprimera ce style en ligne.
Je ne suis pas sûr que ce soit ce que tu voulais. Vous vouliez le remplacer, ce qui, comme déjà souligné, est facilement réalisé par
$('#element').css('display', 'inline')
.Ce que je cherchais, c'était une solution pour SUPPRIMER complètement le style en ligne. J'en ai besoin pour un plugin que j'écris où je dois temporairement définir certaines valeurs CSS en ligne, mais je veux les supprimer plus tard; Je veux que la feuille de style reprenne le contrôle. Je pourrais le faire en stockant toutes ses valeurs d'origine, puis en les remettant en ligne, mais cette solution me semble beaucoup plus propre.
Le voici au format plugin:
Si vous incluez ce plugin dans la page avant votre script, vous pouvez alors simplement appeler
et cela devrait faire l'affaire.
Mise à jour : j'ai maintenant réalisé que tout cela était inutile. Vous pouvez simplement le mettre à blanc:
et il sera automatiquement supprimé pour vous.
Voici une citation des documents :
Je ne pense pas que jQuery fasse de la magie ici; il semble que l'
style
objet le fasse nativement .la source
.css('property')
vous donne la valeur, mais il ne vous dit pas s'il provient d'un style en ligne).style
objet natif semble se comporter de la même manière. J'ai modifié ma réponse avec cette information.$('#element').css('display', '')
?.removeAttr("style")
pour se débarrasser de la balise de style entière ....attr("style")
pour tester la valeur et voir si un style en ligne existe ....attr("style",newValue)
pour le régler sur autre chosela source
display
.style
attribut (maintenant vide) , cela mérite tout de même d'être noté.La façon la plus simple de supprimer des styles en ligne (générés par jQuery) serait:
Le code en ligne devrait disparaître et votre objet devrait adapter le style prédéfini dans vos fichiers CSS.
A travaillé pour moi!
la source
Vous pouvez définir le style en utilisant la
css
méthode de jQuery :la source
<div style="display:block;">
,$('div').hide()
.hide
résout un cas particulier de modification des styles en ligne. Cette réponse concerne tous les cas. (hide/show
ont également une limitation car deux dont deux valeurs sont basculées. ie aucun-> bloc ou aucun-> en ligne.)hide
/show
se souviendra de l'ancienne valeur dedisplay
et la restaurera correctement.vous pouvez créer un plugin jquery comme celui-ci:
usage
la source
elem.style.removeProperty('margin-left')
supprimera justemargin-left
de l'style
attribut (et retournera la valeur de cette propriété). Pour IE6-8, c'estelem.style.removeAttribute()
.La manière paresseuse (qui incitera les futurs designers à maudire votre nom et à vous assassiner dans votre sommeil):
Avertissement: je ne préconise pas cette approche, mais c'est certainement la voie paresseuse.
la source
la source
la source
Si vous souhaitez supprimer une propriété dans un attribut de style - pas simplement la définir sur autre chose - vous utilisez la
removeProperty()
méthode:MISE À JOUR:
J'ai créé un violon interactif pour jouer avec les différentes méthodes et leurs résultats. Apparemment, il n'y a pas beaucoup de différence entre
set to empty string
,set to faux value
etremoveProperty()
. Ils entraînent tous le même repli - qui est soit une règle CSS pré-donnée, soit la valeur par défaut du navigateur.la source
Dans le cas où l'affichage est le seul paramètre de votre style, vous pouvez exécuter cette commande afin de supprimer tout style:
Signifie que si votre élément ressemblait à ceci auparavant:
Maintenant, votre élément ressemblera à ceci:
la source
Voici un filtre de sélection inlineStyle que j'ai écrit qui se branche sur jQuery.
Dans votre cas, vous pouvez utiliser ceci comme:
la source
Modifiez le plugin pour ne plus appliquer le style. Ce serait bien mieux que de supprimer le style par la suite.
la source
$el.css({ height : '', 'margin-top' : '' });
etc...
Laissez simplement le 2e param vide!
la source
"jQuery plugin is applying an inline style (display:block). I'm feeling lazy and want to override it with display:none"
. Bien que votre texte soit correct, votre code ne résout pas la question.$("#element").css({ display: "none" });
Au début, j'ai essayé de supprimer le style en ligne dans CSS, mais cela ne fonctionne pas et un nouveau style comme l'affichage: aucun ne sera écrasé. Mais dans JQuery cela fonctionne comme ça.
la source
J'ai eu un problème similaire avec la propriété width. Je ne pouvais pas supprimer le! Important du code, et comme il avait besoin de ce style sur un nouveau modèle, j'ai ajouté un identifiant (modalstyling) à l'élément et ensuite j'ai ajouté le code suivant au modèle:
la source