Es ist einfach, Inline-CSS-Werte mit Javascript festzulegen. Wenn ich die Breite ändern möchte und HTML wie folgt habe:
<div style="width: 10px"></div>
Alles was ich tun muss ist:
document.getElementById('id').style.width = value;
Dadurch werden die Inline-Stylesheet-Werte geändert. Normalerweise ist dies kein Problem, da der Inline-Stil das Stylesheet überschreibt. Beispiel:
<style>
#tId {
width: 50%;
}
</style>
<div id="tId"></div>
Verwenden dieses Javascript:
document.getElementById('tId').style.width = "30%";
Ich bekomme folgendes:
<style>
#tId {
width: 50%;
}
</style>
<div id="tId" style="width: 30%";></div>
Dies ist ein Problem, da ich nicht nur keine Inline-Werte ändern möchte. Wenn ich nach der Breite suche, bevor ich sie einstelle, wenn ich:
<div id="tId"></div>
Der zurückgegebene Wert ist Null. Wenn ich also Javascript habe, das die Breite von etwas wissen muss, um eine Logik auszuführen (ich erhöhe die Breite um 1%, nicht auf einen bestimmten Wert), wird Null zurückgegeben, wenn ich die Zeichenfolge "50%" erwarte "funktioniert nicht wirklich.
Meine Frage: Ich habe Werte in einem CSS-Stil, die sich nicht inline befinden. Wie kann ich diese Werte abrufen? Wie kann ich den Stil anstelle der Inline-Werte unter Angabe einer ID ändern?
Antworten:
Ok, es hört sich so an, als ob Sie das globale CSS so ändern möchten, dass alle Elemente eines peticularen Stils gleichzeitig wirksam geändert werden. Ich habe kürzlich in einem Shawn Olson-Tutorial gelernt, wie man das selbst macht . Sie können den Code direkt verweisen hier .
Hier ist die Zusammenfassung:
Sie können die Stylesheets über abrufen
document.styleSheets
. Dadurch wird tatsächlich ein Array aller Stylesheets auf Ihrer Seite zurückgegeben. Sie können jedoch über diedocument.styleSheets[styleIndex].href
Eigenschaft feststellen, auf welchem Sie sich befinden . Sobald Sie das Stylesheet gefunden haben, das Sie bearbeiten möchten, müssen Sie das Array mit Regeln abrufen. Dies wird im IE als "Regeln" und in den meisten anderen Browsern als "cssRules" bezeichnet. Sie können anhand der Eigenschaft feststellen, auf welcher CSSRule Sie sich befindenselectorText
. Der Arbeitscode sieht ungefähr so aus:Lassen Sie mich wissen, wie dies für Sie funktioniert, und kommentieren Sie bitte, wenn Sie Fehler sehen.
quelle
rule.value
in FF 20 finden . Es gibtrule.style
jedoch, die einstellbar ist und sich wie verhältelement.style
. Vgl. https://developer.mozilla.org/en-US/docs/DOM/CSSStyleRule . Das Überprüfen auf istrule.type == rule.STYLE_RULE
möglicherweise auch eine gute Idee, bevor Sie darauf zugreifenrule.selectorText
.document.styleSheets[styleIndex].cssRules.[ruleIndex].style = {'color':'red', 'background-color':'green'};
hat für mich gearbeitet, danke!Bitte! Fragen Sie einfach w3 ( http://www.quirksmode.org/dom/w3c_css.html )! Oder eigentlich habe ich fünf Stunden gebraucht ... aber hier ist es!
Die Funktion ist sehr einfach zu bedienen. Beispiel:
Oh..
BEARBEITEN : Wie in der Antwort von @ user21820 beschrieben, ist es möglicherweise etwas unnötig, alle Stylesheets auf der Seite zu ändern. Das folgende Skript funktioniert sowohl mit IE5.5 als auch mit dem neuesten Google Chrome und fügt nur die oben beschriebene Funktion css () hinzu.
quelle
Ich habe den Code in den Antworten gesammelt und diese Funktion geschrieben, die auf meinem FF 25 gut zu laufen scheint.
Dies ist eine Möglichkeit, Werte in das CSS einzufügen, die in JS verwendet werden, auch wenn sie vom Browser nicht verstanden werden. zB maxHeight für einen Körper in einer gescrollten Tabelle.
Anruf :
CCSStylesheetRuleStyle('default', "#mydiv", "height");
CCSStylesheetRuleStyle('default', "#mydiv", "color", "#EEE");
quelle
document.styleSheets[m].href
ist er null und schlägt fehl.Ich weiß nicht, warum die anderen Lösungen die gesamte Liste der Stylesheets für das Dokument durchgehen. Dadurch wird in jedem Stylesheet ein neuer Eintrag erstellt, der ineffizient ist. Stattdessen können wir einfach ein neues Stylesheet anhängen und dort einfach unsere gewünschten CSS-Regeln hinzufügen.
Beachten Sie, dass wir sogar Inline-Stile überschreiben können, die direkt für Elemente festgelegt wurden, indem wir dem Wert der Eigenschaft "! Important" hinzufügen, es sei denn, es gibt bereits spezifischere "! Important" -Stildeklarationen für diese Eigenschaft.
quelle
Ich habe nicht genug Repräsentanten, um Kommentare abzugeben, daher formatiere ich eine Antwort, aber es ist nur eine Demonstration des fraglichen Problems.
Wenn Elementstile in Stylesheets definiert werden, sind sie anscheinend für getElementById ("someElement") nicht sichtbar
Dieser Code veranschaulicht das Problem ... Code von unten auf jsFiddle .
In Test 2 ist beim ersten Aufruf der verbleibende Wert der Elemente undefiniert, und so wird das, was ein einfacher Umschalter sein sollte, durcheinander gebracht. Für meine Verwendung werde ich meine wichtigen Stilwerte inline definieren, aber es scheint den Zweck des Stylesheets teilweise zu verfehlen.
Hier ist der Seitencode ...
Ich hoffe, dies hilft, das Problem zu beleuchten.
Überspringen
quelle
Sie können die "berechneten" Stile jedes Elements abrufen.
IE verwendet etwas namens "currentStyle", Firefox (und ich nehme an, dass andere "standardkonforme" Browser) "defaultView.getComputedStyle" verwendet.
Dazu müssen Sie eine browserübergreifende Funktion schreiben oder ein gutes Javascript-Framework wie Prototype oder jQuery verwenden (suchen Sie in der Javascript-Datei des Prototyps nach "getStyle" und in der Javerycript-Datei "curCss").
Das heißt, wenn Sie die Höhe oder Breite benötigen, sollten Sie wahrscheinlich element.offsetHeight und element.offsetWidth verwenden.
Wenn Sie dem betreffenden Element einen Inline-Stil hinzufügen, kann dieser als "Standard" -Wert fungieren und kann beim Laden der Seite von Javascript gelesen werden, da es sich um die Inline-Stileigenschaft des Elements handelt:
quelle
Mit diesem einfachen 32-Zeilen-Inhalt können Sie ein bestimmtes Stylesheet identifizieren und seine Stile sehr einfach ändern:
quelle
Ich habe noch nie eine praktische Anwendung davon gesehen, aber Sie sollten wahrscheinlich DOM-Stylesheets in Betracht ziehen . Ich denke jedoch ehrlich, dass das übertrieben ist.
Wenn Sie einfach die Breite und Höhe eines Elements ermitteln möchten, unabhängig davon, von wo aus die Bemaßungen angewendet werden, verwenden Sie einfach
element.offsetWidth
undelement.offsetHeight
.quelle
Vielleicht versuchen Sie Folgendes:
quelle