Get Element Stylesheet Style in JavaScript
-
23-08-2019 - |
Frage
Ich habe John Resig getStyle
Funktion von Pro JavaScript Techniques mit dem Stil der Elemente zu erhalten:
function getStyle(elem, name) {
// J/S Pro Techniques p136
if (elem.style[name]) {
return elem.style[name];
} else if (elem.currentStyle) {
return elem.currentStyle[name];
}
else if (document.defaultView && document.defaultView.getComputedStyle) {
name = name.replace(/([A-Z])/g, "-$1");
name = name.toLowerCase();
s = document.defaultView.getComputedStyle(elem, "");
return s && s.getPropertyValue(name);
} else {
return null;
}
}
Allerdings gibt diese Methode Standardstile für ein Element, wenn kein Stil angegeben wird:
http://johnboxall.github.com/test/getStyle.html
alt text http://img.skitch.com/20081227-8qhxie51py21yxuq7scy32635a.png
Ist es möglich, nur das Stylesheet angegebenen Stile eines Elements zu erhalten (und null zurück, wenn der Stil nicht definiert ist)?
Update:
Warum muss ich so ein Tier braucht? Ich baue eine kleine Komponente, die Benutzer Elemente stylen können. Einer der Stile, die angewendet werden kann, ist text-align
- left
, center
, right
- getStyle
unstyled Elemente Standard verwenden center
. Dies macht es unmöglich zu sagen, ob das Element zentriert ist, weil der Benutzer es wollte oder zentriert ist zentriert werden, denn das ist der Standardstil.
Lösung
Ist es möglich, erhalten nur die Sheet angegeben Stile eines Element (und null zurück, wenn der Stil ist nicht definiert)?
Das ist effektiv, was durch die Routine erfolgt präsentieren. Das Problem ist, in den meisten Szenarien, die meisten Arten sind nicht nicht definiert - sie geerbt und / oder von dem einzelnen Browser-internen Sheet definiert.
Sie könnten mit einer ganzen Menge Aufwand, durchläuft alle der Regeln für die Art in Frage zu definieren, in alle der Stylesheets in der aktuellen Ansicht der Dokument, bewerten für das Element in Frage, und wenn keine angewandt ... und wenn keiner an einen Elternteil angewandt (oder dieser Stil wird nicht vererbt) ... dann hält es nicht definiert. Dies wäre langsam, und unglaublich fehleranfällig. Ich würde nicht empfehlen, es zu versuchen.
Vielleicht würden Sie besser machen einen Schritt zurück und fragen, warum Sie überhaupt so etwas brauchen würde?
Andere Tipps
Vielleicht kann Ihre Komponente die Stile wickeln die sie kontrolliert? Dann, wenn ein Stil durch die Komponente festgelegt wird die Komponente weiß, was die Nutzer wollen.