Domanda

Sto usando la funzione getStyle di John Resig da Tecniche Pro JavaScript per ottenere lo stile di elementi:

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;
    }
}

Tuttavia, questo metodo restituisce stili di default per un elemento, se non viene specificato alcun stile:

http://johnboxall.github.com/test/getStyle.html

alt text http://img.skitch.com/20081227-8qhxie51py21yxuq7scy32635a.png

E 'possibile ottenere solo il foglio di stile specificato stili di un elemento (e restituire null se lo stile non è definito)?

Aggiornamento:

Perché ho bisogno di una bestia? Sto costruendo una piccola componente che consente agli utenti designassero elementi. Uno degli stili che possono essere applicati sia text-align - left, center, right - Utilizzando getStyle elementi senza stile predefinito center. Questo rende impossibile dire se l'elemento viene centrato in quanto l'utente ha voluto che fosse centrata o è centrata, perché questo è lo stile predefinito.

È stato utile?

Soluzione

  

E 'possibile ottenere solo il   foglio di stile specificato stili di un   elemento (e restituire null se lo stile   non è definito)?

Questo è ciò che viene fatto in modo efficace dalla routine si presenti. Il problema è, nella maggior parte degli scenari, la maggior parte degli stili sono non non definita - sono ereditate e / o definite dal foglio di stile interno del singolo browser.

Si potrebbe, con un sacco di fatica, scorrere tutti delle regole che definiscono lo stile in questione, in tutti dei fogli di stile nella vista corrente della documento, li valutano per l'elemento in questione, e se nessuno applicata ... e se nessuno applicato ad un genitore (o di questo stile particolare, non è ereditaria) ... quindi prendere in considerazione è indefinito. Questo sarebbe stato lento, e incredibilmente soggetto a errori. Io non lo consiglio di provarlo.

Forse si farebbe meglio fare un passo indietro e chiedere il motivo per cui si sarebbe mai bisogno di una cosa del genere?

Altri suggerimenti

Forse il componente può avvolgere gli stili che da essa controllate? Poi, quando lo stile viene impostato attraverso il componente della componente sa ciò che l'utente vuole.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top