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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top