Ich möchte eine Zeichenfolge mit dem gesamten Inhalt einer CSS-Regel zurückgeben, wie das Format, das Sie in einem Inline-Stil sehen würden. Ich möchte dies tun können, ohne zu wissen, was in einer bestimmten Regel enthalten ist, daher kann ich sie nicht einfach anhand des Stilnamens (wie .style.width
usw.) herausziehen .
Das CSS:
.test {
width:80px;
height:50px;
background-color:#808080;
}
Der bisherige Code:
function getStyle(className) {
var classes = document.styleSheets[0].rules || document.styleSheets[0].cssRules
for(var x=0;x<classes.length;x++) {
if(classes[x].selectorText==className) {
//this is where I can collect the style information, but how?
}
}
}
getStyle('.test')
javascript
html
css
Diodeus - James MacFarlane
quelle
quelle
Antworten:
Von hier aus angepasst , basierend auf der Antwort von scunliffe:
quelle
var classes
solltedocument.styleSheets[0].rules[0].cssRules
in Chrome sein. Dies könnte (kreativ) der Unterlegscheibe in der Antwort hinzugefügt werden.Da die akzeptierte Antwort von "nsdel" nur mit einem Stylesheet in einem Dokument verfügbar ist, ist dies die angepasste voll funktionsfähige Lösung:
Hinweis: Der Selektor muss derselbe sein wie im CSS.
quelle
global_
ist nur ein Alias für das Fensterobjekt. Ich habe das Code-Snippet bearbeitet. Es sollte jetzt funktionierenLÖSUNG 1 (CROSS-BROWSER)
LÖSUNG 2 (CROSS-BROWSER)
quelle
Einige Browser-Unterschiede, die Sie beachten sollten:
Angesichts des CSS:
In InsDels Beispiel haben Klassen 2 Klassen in FF und 3 Klassen in IE7 .
Mein Beispiel veranschaulicht dies:
quelle
Hier ist Code zum Durchlaufen aller Regeln auf einer Seite:
quelle
Hinweis: "menu" ist eine Element-ID, auf die Sie CSS angewendet haben. "className" Ein CSS-Klassenname, den wir benötigen, um seinen Text zu erhalten.
quelle
item
Methode verwendet einen ganzzahligen Index, keinen Klassennamen).Ich habe keinen der Vorschläge gefunden, um wirklich zu funktionieren. Hier ist eine robustere Version, die den Abstand beim Suchen von Klassen normalisiert.
Hier ist es in Aktion von der Chrome-Konsole.
quelle
Ich habe eine ähnliche Hilfsfunktion erstellt, die die nicht benötigten Stile für diese Seite anzeigt. Hängt ein
<div>
an den Körper an und listet alle Stile auf, die nicht verwendet wurden.(zur Verwendung mit der Firebug-Konsole)
quelle
Habe die Antwort von Julmot angepasst, um ein vollständigeres Ergebnis zu erhalten. Diese Methode gibt auch Stile zurück, bei denen die Klasse Teil des Selektors ist.
Außerdem habe ich eine Funktion erstellt, die die CSS-Stildefinitionen im Unterbaum eines von Ihnen bereitgestellten Stammknotens (über einen JQuery-Selektor) sammelt.
Beachten Sie, dass die obige Funktion nur die erste aufnimmt, wenn eine Klasse mehrmals mit demselben Selektor definiert wird. Beachten Sie, dass das Beispiel jQuery verwendet (aber die Kabine kann relativ einfach umgeschrieben werden, um sie nicht zu verwenden).
quelle
// funktioniert im IE, nicht sicher über andere Browser ...
quelle
Diese Version durchläuft alle Stylesheets auf einer Seite. Für meine Bedürfnisse befanden sich die Stile normalerweise im vorletzten der über 20 Stylesheets, daher überprüfe ich sie rückwärts.
quelle
Ich habe die Rückgabe eines Objekts hinzugefügt, bei dem Attribute nach Stil / Werten analysiert werden:
quelle
style.cssText.match(...).1
ist null oder kein ObjektUncaught ReferenceError: classStyleTxt is not defined
Ich habe eine Version erstellt, die alle Stylesheets durchsucht und Übereinstimmungen als Schlüssel- / Wertobjekt zurückgibt. Sie können auch startWith angeben, um den untergeordneten Stilen zu entsprechen.
kehrt zurück:
von:
Der Code:
Ich verwende dies in der Produktion als Teil des reinen Projekts. Ich hoffe es hilft.
quelle
Ich hatte das gleiche Problem. Und mit Hilfe von Jungs habe ich eine wirklich clevere Lösung gefunden, die dieses Problem vollständig löst (auf Chrom laufen).
Extrahieren Sie alle Bilder aus dem Netzwerk
quelle
Druckt in einer Zeile das generierte CSS für jede Abfrage aus.
quelle
Basierend auf der Antwort von @dude sollte dies relevante Stile in einem Objekt zurückgeben, zum Beispiel:
Dies wird zurückkehren:
Code:
quelle
_.pickBy(classes[x].style, (k,v) => isNaN(parseInt(k)) && typeof(v) == 'string' && v && v != 'initial' && k != 'cssText' )