Ich bin mir nicht sicher, ob du das wolltest. Sie wollten es überschreiben, was, wie bereits erwähnt, leicht von erledigt werden kann$('#element').css('display', 'inline') .
Was ich suchte, war eine Lösung, um den Inline-Stil vollständig zu entfernen. Ich benötige dies für ein Plugin, das ich schreibe und in dem ich vorübergehend einige Inline-CSS-Werte festlegen muss, diese aber später entfernen möchte. Ich möchte, dass das Stylesheet die Kontrolle zurückerhält. Ich könnte es tun, indem ich alle ursprünglichen Werte speichere und sie dann wieder inline setze, aber diese Lösung fühlt sich für mich viel sauberer an.
Durch Festlegen des Werts einer Stileigenschaft auf eine leere Zeichenfolge - z. B. $('#mydiv').css('color', '')- wird diese Eigenschaft aus einem Element entfernt, wenn sie bereits direkt angewendet wurde, sei es im HTML-Stilattribut, über die .css()Methode von jQuery oder durch direkte DOM-Manipulation der Stileigenschaft. Ein Stil, der mit einer CSS-Regel in einem Stylesheet oder <style>Element angewendet wurde, wird jedoch nicht entfernt .
@ximi - Danke Mann. Ich habe darüber nachgedacht und festgestellt, dass dies keine Zeitverschwendung ist. Es könnte verwendet werden, um nach Inline-Stilen zu suchen, für die es derzeit in jQuery keine Unterstützung .css('property')gibt ( gibt Ihnen den Wert an, sagt Ihnen jedoch nicht, ob er von einem Inline-Stil stammt).
Joseph Silber
Ich bin unabhängig zu dem gleichen Schluss gekommen - eine leere Zeichenfolge scheint genau das zu tun, was wir wollen. Es ist nicht offiziell in der API dokumentiert, wird aber hoffentlich weiter funktionieren.
Jon z
@ Jonz - Es ist offiziell dokumentiert (obwohl ich nicht weiß, wann es hinzugefügt wurde; ich kann mich nicht erinnern, es dort gesehen zu haben, als ich es ursprünglich gepostet habe). Ich glaube auch nicht, dass jQuery hier etwas unternimmt. Das native styleObjekt scheint sich auf die gleiche Weise zu verhalten. Ich habe meine Antwort mit diesen Informationen geändert.
Joseph Silber
Funktioniert dies mit Dingen wie der Schriftfamilie oder bringt das - den regulären Ausdruck durcheinander?
TMH
4
@mosh - Warum benutzt du nicht einfach $('#element').css('display', '')?
Joseph Silber
157
.removeAttr("style") um einfach den ganzen Style-Tag loszuwerden ...
.attr("style") um den Wert zu testen und festzustellen, ob ein Inline-Stil vorhanden ist ...
.attr("style",newValue) um es auf etwas anderes zu setzen
Dies betrifft nicht nur alle Inline-Stile display.
SLaks
1
klingt gut krank probieren Sie es aus und lassen Sie es Sie wissen, ich verwende nie Inline-Stile normalerweise so glücklich, alle Inline-Stile zu löschen
Haroldo
11
@ Slaks gut, das habe ich mit "den ganzen Style-Tag loswerden" gemeint;)
heisenberg
Hallo. Gibt es eine Möglichkeit zu überprüfen, ob ein 'Stil' auf das ... $ ('*') angewendet wurde, und zwar aus einer beliebigen Quelle wie einem Inline-Stil, der atribute wie font, b, strong, css file .. formatiert, bevor versucht wird, dies zu tun irgendetwas entfernen / zurücksetzen oder einfach alle einen Schuss zurücksetzen?
Milche Patern
Da das Entfernen jedes einzelnen Inline-Stils das (jetzt leere) styleAttribut nicht entfernt, ist dies dennoch bemerkenswert.
Brilliand
26
Der einfachste Weg, Inline-Stile (von jQuery generiert) zu entfernen, ist:
$(this).attr("style","");
Der Inline-Code sollte verschwinden und Ihr Objekt sollte den in Ihren CSS-Dateien vordefinierten Stil anpassen.
äh, was? Ich verstehe wahrscheinlich nichts. Ich denke darüber nach <div style="display:block;">, $('div').hide().
Kobi
3
@Kobi: Behebt hideeinen Sonderfall beim Ändern von Inline-Stilen. Diese Antwort spricht alle Fälle an. ( hide/showhaben auch eine Einschränkung als zwei, welche zwei Werte umgeschaltet werden. dh keine-> Block oder keine-> Inline.)
Joel
@Joel: hide/ showmerkt sich den alten Wert von displayund stellt ihn korrekt wieder her.
SLaks
@ Slaks: Cool. Das muss kürzlich hinzugefügt worden sein, da ich mich daran erinnere, dass ich zuvor Probleme damit hatte.
Joel
12
Sie können ein jquery-Plugin wie folgt erstellen:
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]);});};})();
Verwendung
$(".foo").removeInlineCss();//remove all inline styles
$(".foo").removeInlineCss("display");//remove one inline style
$(".foo").removeInlineCss("color font-size font-weight");//remove several inline styles
Diese Antwort enthält einen sehr übersichtlichen einzeiligen Trick, der auch ohne jQuery nützlich ist und den möglicherweise nicht viele Entwickler kennen. Beim Aufrufen elem.style.removeProperty('margin-left')wird nur margin-leftdas styleAttribut entfernt (und der Wert dieser Eigenschaft zurückgegeben). Für IE6-8 ist es elem.style.removeAttribute().
Craigpatik
9
Der faule Weg (der dazu führen wird, dass zukünftige Designer Ihren Namen verfluchen und Sie im Schlaf ermorden):
#myelement {
display: none !important;}
Haftungsausschluss: Ich befürworte diesen Ansatz nicht, aber es ist sicherlich der faule Weg.
Wenn Sie eine Eigenschaft innerhalb eines Stilattributs entfernen und nicht nur auf etwas anderes setzen möchten, verwenden Sie die folgende removeProperty()Methode:
UPDATE:
Ich habe eine interaktive Geige erstellt , um mit den verschiedenen Methoden und ihren Ergebnissen herumzuspielen. Offenbar gibt es nicht viel Unterschied zwischen set to empty string, set to faux valueund removeProperty(). Sie alle führen zu demselben Fallback - dies ist entweder eine vorgegebene CSS-Regel oder der Standardwert des Browsers.
daher die "Faulen"! Ich kann nicht sagen, welches Bit von welchem Plugin es ist!
Haroldo
4
Ich weiß nicht, wie du faul definierst, ich habe nur geantwortet, wie ich es machen würde. Es scheint sinnvoll zu sein, das Problem dort zu beheben, wo es entsteht, anstatt Dinge außerhalb des Plugins zu reparieren. Ich sehe Unordnung voraus, wenn ich es so mache.
Josh Stodola
Welche Richtung? Wenn Sie das Plugin bearbeiten, können nach dem Aktualisieren auf eine neue Version Probleme auftreten, die Ihre Änderung überschreiben und das Layout durcheinander bringen. Wer wird sich in ungefähr einem Jahr daran erinnern, dass Sie diese eine kleine Anpassung dort vorgenommen haben? Ich versuche immer, eine andere Lösung zu finden, als den Quellcode des
Wenn ihr etwas abstimmt, hinterlasst bitte einen Kommentar.
Er Nrik
1
Ich würde vermuten, dass Sie die Abstimmungen erhalten haben, weil Sie die gestellte Frage nicht beantwortet haben : "jQuery plugin is applying an inline style (display:block). I'm feeling lazy and want to override it with display:none". Obwohl Ihr Text korrekt ist, löst Ihr Code die Frage nicht.
Gone Coding
Das Problem, das ich hatte, wurde gelöst. Tnx.
Jodalr
0
$("#element").css({ display: "none" });
Zuerst habe ich versucht, den Inline-Stil in CSS zu entfernen, aber es funktioniert nicht und ein neuer Stil wie die Anzeige: Keiner wird überschrieben. Aber in JQuery funktioniert es so.
Ich hatte ein ähnliches Problem mit der Eigenschaft width. Ich konnte das! Wichtige nicht aus dem Code entfernen, und da es diesen Stil für eine neue Vorlage benötigte, fügte ich dem Element eine ID (Modalstyling) hinzu und fügte anschließend der Vorlage folgenden Code hinzu:
<scripttype="text/javascript">
$('#modalstyling').css('width','');//Removal of width !important
$('#modalstyling').width('75%');//Set custom width</script>
Antworten:
Update: Während die folgende Lösung funktioniert, gibt es eine viel einfachere Methode. Siehe unten.
Folgendes habe ich mir ausgedacht, und ich hoffe, dass dies nützlich ist - für Sie oder andere:
Dadurch wird dieser Inline-Stil entfernt.
Ich bin mir nicht sicher, ob du das wolltest. Sie wollten es überschreiben, was, wie bereits erwähnt, leicht von erledigt werden kann
$('#element').css('display', 'inline')
.Was ich suchte, war eine Lösung, um den Inline-Stil vollständig zu entfernen. Ich benötige dies für ein Plugin, das ich schreibe und in dem ich vorübergehend einige Inline-CSS-Werte festlegen muss, diese aber später entfernen möchte. Ich möchte, dass das Stylesheet die Kontrolle zurückerhält. Ich könnte es tun, indem ich alle ursprünglichen Werte speichere und sie dann wieder inline setze, aber diese Lösung fühlt sich für mich viel sauberer an.
Hier ist es im Plugin-Format:
Wenn Sie dieses Plugin vor Ihrem Skript in die Seite aufnehmen, können Sie es einfach aufrufen
und das sollte den Trick machen.
Update : Mir wurde jetzt klar, dass dies alles zwecklos ist. Sie können es einfach auf leer setzen:
und es wird automatisch für Sie entfernt.
Hier ist ein Zitat aus den Dokumenten :
Ich glaube nicht, dass jQuery hier etwas mag. es scheint, dass das
style
Objekt dies nativ tut .quelle
.css('property')
gibt ( gibt Ihnen den Wert an, sagt Ihnen jedoch nicht, ob er von einem Inline-Stil stammt).style
Objekt scheint sich auf die gleiche Weise zu verhalten. Ich habe meine Antwort mit diesen Informationen geändert.$('#element').css('display', '')
?.removeAttr("style")
um einfach den ganzen Style-Tag loszuwerden ....attr("style")
um den Wert zu testen und festzustellen, ob ein Inline-Stil vorhanden ist ....attr("style",newValue)
um es auf etwas anderes zu setzenquelle
display
.style
Attribut nicht entfernt, ist dies dennoch bemerkenswert.Der einfachste Weg, Inline-Stile (von jQuery generiert) zu entfernen, ist:
Der Inline-Code sollte verschwinden und Ihr Objekt sollte den in Ihren CSS-Dateien vordefinierten Stil anpassen.
Hat für mich gearbeitet!
quelle
Sie können den Stil mit der
css
Methode von jQuery festlegen :quelle
<div style="display:block;">
,$('div').hide()
.hide
einen Sonderfall beim Ändern von Inline-Stilen. Diese Antwort spricht alle Fälle an. (hide/show
haben auch eine Einschränkung als zwei, welche zwei Werte umgeschaltet werden. dh keine-> Block oder keine-> Inline.)hide
/show
merkt sich den alten Wert vondisplay
und stellt ihn korrekt wieder her.Sie können ein jquery-Plugin wie folgt erstellen:
Verwendung
quelle
elem.style.removeProperty('margin-left')
wird nurmargin-left
dasstyle
Attribut entfernt (und der Wert dieser Eigenschaft zurückgegeben). Für IE6-8 ist eselem.style.removeAttribute()
.Der faule Weg (der dazu führen wird, dass zukünftige Designer Ihren Namen verfluchen und Sie im Schlaf ermorden):
Haftungsausschluss: Ich befürworte diesen Ansatz nicht, aber es ist sicherlich der faule Weg.
quelle
quelle
quelle
Wenn Sie eine Eigenschaft innerhalb eines Stilattributs entfernen und nicht nur auf etwas anderes setzen möchten, verwenden Sie die folgende
removeProperty()
Methode:UPDATE:
Ich habe eine interaktive Geige erstellt , um mit den verschiedenen Methoden und ihren Ergebnissen herumzuspielen. Offenbar gibt es nicht viel Unterschied zwischen
set to empty string
,set to faux value
undremoveProperty()
. Sie alle führen zu demselben Fallback - dies ist entweder eine vorgegebene CSS-Regel oder der Standardwert des Browsers.quelle
Falls die Anzeige der einzige Parameter in Ihrem Stil ist, können Sie diesen Befehl ausführen, um alle Stile zu entfernen:
Bedeutet, dass, wenn Ihr Element zuvor so aussah:
Jetzt sieht Ihr Element folgendermaßen aus:
quelle
Hier ist ein InlineStyle-Auswahlfilter, den ich geschrieben habe und der in jQuery integriert wird.
In Ihrem Fall könnten Sie dies wie folgt verwenden:
quelle
Ändern Sie das Plugin so, dass der Stil nicht mehr angewendet wird. Das wäre viel besser, als den Stil danach zu entfernen.
quelle
$el.css({ height : '', 'margin-top' : '' });
etc...
Lass einfach den 2. Parameter leer!
quelle
"jQuery plugin is applying an inline style (display:block). I'm feeling lazy and want to override it with display:none"
. Obwohl Ihr Text korrekt ist, löst Ihr Code die Frage nicht.$("#element").css({ display: "none" });
Zuerst habe ich versucht, den Inline-Stil in CSS zu entfernen, aber es funktioniert nicht und ein neuer Stil wie die Anzeige: Keiner wird überschrieben. Aber in JQuery funktioniert es so.
quelle
Ich hatte ein ähnliches Problem mit der Eigenschaft width. Ich konnte das! Wichtige nicht aus dem Code entfernen, und da es diesen Stil für eine neue Vorlage benötigte, fügte ich dem Element eine ID (Modalstyling) hinzu und fügte anschließend der Vorlage folgenden Code hinzu:
quelle