Wie entferne ich CSS-Eigenschaften mit Javascript?


195

Ist es möglich, eine CSS-Eigenschaft eines Elements mit JavaScript zu entfernen? zB habe ich div.style.zoom = 1.2, jetzt möchte ich die Zoom-Eigenschaft über JavaScript entfernen?


3
Bitte stellen Sie klar: Versuchen Sie, eine Klasse aus einem Element oder ein Attribut aus einem Element zu entfernen?
Jan Hančič

1
Entschuldigung, kein Klassenattribut für ein Element.
saß am

warum abstimmen? Es ist eine anständige Frage, nein?
Roland Bouman

2
Hallo, ich verstehe nicht - warum hast du die Antwort der Naivisten als "akzeptierte Antwort" markiert? Ich meine, seine Lösung ist gut für den Fall, dass Sie Elemente nach Klasse suchen möchten, aber alles in Ihrer Frage zeigt an, dass Sie nach einer Methode gesucht haben, um den Effekt des Festlegens einer Eigenschaft des lokalen Stils zu ändern. Sicher passt meine Antwort besser zum Problem? Vielleicht habe ich deine Frage falsch verstanden?
Roland Bouman

1
@RolandBouman Eigentlich sollte die akzeptierte Antwort in die von Edvinas Ilčenko geändert werden, da sie sich mit den Fragen zum Entfernen befasst und nicht zum Standard. Ihre Antwort hat immer noch Wert, daher habe ich sie bearbeitet, um die Unterscheidung zu verdeutlichen.
Whitneyland

Antworten:


187

Sie haben zwei Möglichkeiten:

OPTION 1:

Sie können die removeProperty-Methode verwenden . Es wird ein Stil aus einem Element entfernt.

el.style.removeProperty('zoom');

OPTION 2:

Sie können den Standardwert festlegen:

el.style.zoom = "";

Der effektive Zoom entspricht nun den Definitionen in den Stylesheets (über Link- und Style-Tags). Diese Syntax ändert also nur den lokalen Stil dieses Elements.


… Zusammen mit dem Benutzer-CSS und den Standardstilen des Browsers.
Quentin

Ich habe das OP so verstanden, dass sie es so machen wollten, als hätten sie die Stileigenschaft des Elements nicht festgelegt, was genau das ist, was Sie bereitgestellt haben. Ich habe versucht, el.style.removeProperty ('zoom') zu verwenden. (oder 'füllen', in meinem Fall), das scheint im IE dasselbe zu tun und von den anderen Browsern ignoriert zu werden. Aus irgendeinem Grund war ich überrascht, dass das Festlegen einer leeren Zeichenfolge den gleichen Effekt hat und auf allen Browsern (neueren Versionen) zu funktionieren scheint.
Shavais

Ist dieses Verhalten irgendwo in einem Standard angegeben? Ich kann es nicht finden :-(
Oliver Joseph Ash

@OliverJosephAsh ja, es ist dokumentiert, siehe diese Antwort unten stackoverflow.com/a/7901886/700206
Whitney



10

Sie können das styleSheets-Objekt verwenden:

document.styleSheets[0].cssRules[0].style.removeProperty("zoom");

Vorsichtsmaßnahme Nr. 1: Sie müssen den Index Ihres Stylesheets und den Index Ihrer Regel kennen.

Vorsichtsmaßnahme Nr. 2: Dieses Objekt wird von den Browsern inkonsistent implementiert. Was in einem funktioniert, funktioniert möglicherweise nicht in den anderen.


Das scheint wirklich spröde zu sein. Wird es nicht brechen, wenn sich Ihre Indizes ändern?
Casey Rodarmor

Ja. Genau das sagt Vorbehalt Nr. 1.
James.garriss

Mein Chrome 26 hat keine CSSStyleRule.prototype.removeProperty= (In der Tat CSSStyleRulehat keine Methoden. = (
Rudie

CSSStyleSheet.prototype.removeRulezur Rettung.
Rudie

@ Rudie, nicht wahr CSSStyleSheet.prototype.deleteRule?
Roka

7
element.style.height = null;

Ausgabe:

<div style="height:100px;"> 
// results: 
<div style="">

Es scheint, dass das Setzen des Stils auf null in IE11 nicht funktioniert.
MaximeW

1
Warum sollte sich jemand um IEBrowser kümmern ? Ich ignoriere sie absichtlich schon seit Jahren.
T.Todua

4

Sie können versuchen, alle Elemente mit dieser Klasse zu finden und die Eigenschaft "zoom" auf "nichts" zu setzen.

Wenn Sie die JQasy-Javascript-Bibliothek verwenden, können Sie dies tun $(".the_required_class").css("zoom","")

Bearbeiten: Diese Aussage wurde entfernt, da sie sich als nicht wahr herausstellte, wie in einem Kommentar und anderen Antworten ausgeführt, die seit 2010 tatsächlich möglich sind.

Falsch: Es gibt keine allgemein bekannte Möglichkeit, Stylesheets über JavaScript zu ändern.


5
Ja da ist. Programmgesteuertes Ändern von Stylesheets, obwohl Javascript nicht schwierig ist. Es funktioniert browserübergreifend mit großer Leistung und ist wirklich sinnvoll, wenn eine Eigenschaft geändert wird, die für eine Reihe von Elementen gleich sein sollte. Wie auch im Januar 2010. Hier ist ein kurzes Beispiel: stackoverflow.com/questions/14927706/…
Clox

Clox: Stylesheets hinzufügen, die einige Eigenschaften programmgesteuert überschreiben - natürlich! Ändern der bereits geladenen - Ich habe noch nichts davon gehört.
Naivisten

Soll es eher css () als attr () sein? Oder ist es vielleicht attr () im IE?
Alex KeySmith

es sollte eigentlich sein css, nicht attrdu hast recht.
Naivisten


0

Dies sollte den Trick machen - den Inline-Stil für den Zoom auf normal setzen:

$ ('div'). attr ("style", "zoom: normal;");


1
Die Frage war, wie ein Stil entfernt werden kann. Diese Antwort zerstört alle vorhandenen Stile und ersetzt sie durch einen neuen Eintrag.
Whitneyland

0

Wenn Sie die Immobilie bereits kennen, wird dies tatsächlich geschehen ...

beispielsweise:

<a href="test.html" style="color:white;zoom:1.2" id="MyLink"></a>

    var txt = "";
    txt = getStyle(InterTabLink);
    setStyle(InterTabLink, txt.replace("zoom\:1\.2\;","");

    function setStyle(element, styleText){
        if(element.style.setAttribute)
            element.style.setAttribute("cssText", styleText );
        else
            element.setAttribute("style", styleText );
    }

    /* getStyle function */
    function getStyle(element){
        var styleText = element.getAttribute('style');
        if(styleText == null)
            return "";
        if (typeof styleText == 'string') // !IE
            return styleText;
        else  // IE
            return styleText.cssText;
    } 

Beachten Sie, dass dies nur für Inline-Stile funktioniert ... nicht für Stile, die Sie durch eine Klasse oder ähnliches angegeben haben ...

Anderer Hinweis: Möglicherweise müssen Sie einige Zeichen in dieser Ersetzungsanweisung maskieren, aber Sie haben die Idee.


-3

So ändern Sie alle Klassen für ein Element:

document.getElementById("ElementID").className = "CssClass";

So fügen Sie einem Element eine zusätzliche Klasse hinzu:

document.getElementById("ElementID").className += " CssClass";

So überprüfen Sie, ob eine Klasse bereits auf ein Element angewendet wurde:

if ( document.getElementById("ElementID").className.match(/(?:^|\s)CssClass(?!\S)/) )

1
Die Frage war, wie man einen Stil entfernt, diese Antwort hat nichts damit zu tun.
Whitneyland
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.