Wie hebe ich das CSS-Attribut eines Elements mit jQuery auf?


93

Wenn ich einen CSS-Wert für ein bestimmtes Element mithilfe von:

$('#element').css('background-color', '#ccc');

Ich möchte in der Lage sein, diesen elementspezifischen Wert zu deaktivieren und den kaskadierten Wert zu verwenden, wie folgt:

$('#element').css('background-color', null);

Aber diese Syntax scheint nicht zu funktionieren - ist dies mit einer anderen Syntax möglich?

Bearbeiten: Der Wert wird nicht vom übergeordneten Element geerbt - die ursprünglichen Werte stammen von einem Selektor auf Elementebene. Entschuldigung für die Verwirrung!

Antworten:


140

Aus den jQuery-Dokumenten :

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 styleEigenschaft. Es wird jedoch kein Stil entfernt, der mit einer CSS-Regel in einem Stylesheet oder <style>Element angewendet wurde .


Ich bin auf diese Frage gestoßen, als ich dieses Problem hatte. In meinem Fall habe ich das CSS-Attribut in einem styleAttribut auf dem Tag festgelegt, sodass diese Methode nicht funktioniert hat. Durch Anwenden des Stils mit der .css()Methode anstelle des Tags konnte ich ihn später entfernen.
— Glenn Moss

14

Ich denke, Sie können auch tun:

$('#element').css('background-color', '');

Das habe ich vor langer Zeit getan, damit die displayEigenschaft in einfach-alt-Javascript ein Feld ein- / ausblendet.


4

Tatsächlich nullscheint die Syntax, die ich für falsch hielt (mit ), zu funktionieren - mein Selektor wurde nur falsch geformt und ergab somit keine Elemente. D'oh!


21
Ab jquery 1.4.3 css(..., null)funktioniert nicht und css(..., '')sollte stattdessen verwendet werden - bugs.jquery.com/ticket/7233
— Tim Sylvester

3

Versuche dies:

$('#element').css('background-color', 'inherit');

1
Erben ist leider nicht das Verhalten, nach dem ich suche: "Die Eigenschaft nimmt den gleichen berechneten Wert an wie die Eigenschaft für das übergeordnete Element" von w3.org/TR/CSS2/cascade.html
— cdleary

Wahrscheinlicher "initial" als "erben". 'Erben' passt sich dem Elternteil an, 'Initial' macht das, was das Wort sagt.
— Chris S.

0

Für das, was es wert ist, scheint dies in IE 8 für 'Filter' nicht zu funktionieren. Ich musste dies verwenden (in fadeIn callback):

$(this).attr('style', $(this).attr('style').replace(/\bfilter:\s*;*/, ''));

Offensichtlich musste ich eine leere Inline-Filterdeklaration entfernen, damit das CSS wirksam werden konnte. Es gab andere Inline-Regeln, sodass ich das Stilattribut nicht einfach entfernen konnte.


-1

Wenn es helfen kann, füge ich ein Problem mit doppeltem Anführungszeichen hinzu:

$('#element').css("border-color", "");

funktioniert nicht während

$('#element').css('border-color', '');

funktioniert

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.