2016-07-22 23 views
2

Ich muss vorhandene globale CSS-Regeln ändern, dann greife ich auf document.styleSheets, meine Regel erhalten und ändern.Firefox und IE kann nicht ändern cssRules

Ich modifiziere den Selektor durch Zugriff auf die selectorText Eigenschaft.

CSS-Code

<style type="text/css"> 
    .class { 
     color: #230020; 
    } 
</style> 

JavaScript-Code

var rule = document.styleSheets[0].cssRules[0]; // obtain the first rule. 

/* Chrome, Opera, Safari */ 
rule.selectorText; // returns ".class" 
rule.selectorText = ".another-class"; 
rule.selectorText; // returns ".another-class", then it works and the rule changed. 

Mein Problem ist in allen Versionen von Firefox und Internet Explorer, dass die Eigenschaft selector scheint zu schreibgeschützt.

/* Internet Explorer, Edge, and Firefox */ 
rule.selectorText; // returns ".class" 
rule.selectorText = ".another-class"; 
rule.selectorText; // returns ".class", It remains as it was. 

Wie kann ich es mit Mozilla Firefox, Microsoft Internet Explorer und Edge arbeiten lassen?

Antwort

2

Nach dem MDN wird selectorText gemeint werden read-only: für den Regelsatz, die Textdarstellung des Wählers

Die CSSRule.selectorText Eigenschaft bekommt. Dies wird in einer readonly Weise implementiert; Um Stylesheet-Regeln dynamisch festzulegen, siehe Verwenden dynamischer Formatierungsinformationen.

Leider scheint es keine browserübergreifende Möglichkeit zu geben, den Selektor einer CSS-Regel zu ändern. Wenn dies Ihr Ziel ist, können Sie versuchen, die gesamte Regel zu löschen und sie durch einen neuen zu ersetzen, indem Sie den gleichen Regelindex verwenden. Sie müssen lediglich alle Regeleigenschaften zusammen mit dem Selektor einschließen:

var cssText = document.styleSheets[1].cssRules[0].style.cssText; 
document.styleSheets[0].deleteRule(0); 
document.styleSheets[0].insertRule('.another-class { ' + cssText + ' }', 0); 

Funktioniert für mich in Firefox und anderen Browsern. Siehe insertRule() und deleteRule().

+0

Ich habe meine Antwort aktualisiert, um Ihnen zu zeigen, wie Sie die ursprünglichen Stileigenschaften zwischenspeichern können, so dass Sie sie nicht neu schreiben müssen. – skyline3000

+0

Das ist die richtige Antwort, danke. – user123123123

+0

Dies ist nicht korrekt - überprüfen Sie die [spec] (https://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule). Der FF-Bug ist immer noch da, obwohl er angeblich mit Vorbehalte im IE funktioniert. Ich habe den MDN-Artikel korrigiert. – Semicolon