2013-01-03 17 views
7

Inserisco dinamicamente dell'Html in una pagina Web (dopo che ho rilevato un evento dall'utente). Questo html ha bisogno di alcuni stili CSS e mi chiedo quale sia il modo più pulito per farlo, usando jQuery. Non sono lo sviluppatore del sito web, quindi non posso aggiungere quelle regole al css originale.Il modo migliore per aggiungere nuove regole css con jquery?

Suppongo di aver già inserito alcuni html senza stile, tra cui una classe formElement. Posso scrivere nel mio documento una nuova <style> blocco, per esempio:

my_html = '<style type="text/css">'; 
my_html += ' .formElement {'; 
my_html += '  display: block;'; 
my_html += '  width: 240px;'; 
my_html += '  position: relative;'; 
my_html += '  padding: 4px 0;'; 
my_html += ' }'; 
my_html += '</style>'; 
my_html = $(my_html); 
$('body').prepend(my_html); 

Oppure, posso utilizzare il metodo css:

$('.formElement').css({ 
    'display': 'block', 
    'width': '240px', 
    'position': 'relative', 
    'padding': '4px 0' 
}); 

Quale soluzione è il migliore/più pulito?

EDIT:

Come non posso aggiungere direttamente le regole del CSS, continuerò con il metodo di jQuery css. Alcune altre questioni correlate forniscono soluzioni così:

Non posso utilizzare i plugin jQuery, ma se potessi, certamente utilizzare jQuery.Rule

Grazie tutti voi per il vostro prezioso aiuto.

+0

Il tuo secondo codice non funziona se si aggiungono più elementi con quella classe successiva. – Dogbert

+0

Considerate anche che la seconda opzione avrà più specificità in quanto è in linea. – scoota269

risposta

3

Onestamente, il modo migliore potrebbe essere nessuno dei due.Se dovessi sceglierne uno, sarebbe il mio metodo jquery css, solo perché è più pulito, tuttavia, considera questa alternativa per prestazioni migliori e un codice più pulito:

Crea classi CSS da aggiungere ai tuoi elementi quando necessario. Per esempio:

.formElementAlpha { 
    width:240px; 
    padding:4px 0; 
} 
.formElementBravo { 
    width:400px; 
    height:50px; 
    padding:20px 0; 
    line-height:50px; 
    font-size:30px; 
} 

poi, con jQuery, quando ne avete bisogno:

$('.formElement').addClass('formElementAlpha'); 

o

$('.formElement[name="bigUsernameInput"]').addClass('formElementBravo'); 

avrei reserver il metodo di jQuery css per le istanze in cui è necessario modificare un elemento specifico basato su una sorta di interazione dell'utente o altro evento dinamico che richiede l'utilizzo del valore delle variabili JavaScript per determinare gli stili che si stanno applicando. Dal momento che sembra che tu sappia già come vuoi modellarli, lascia che i CSS facciano il loro lavoro.

+0

Grazie per la tua risposta dettagliata. Immagino che tu abbia ragione a non piacere a nessuno dei due metodi. Mi piace quello che proponi ma il fatto è che io non sono lo sviluppatore del sito e quindi non posso creare le classi CSS. Posso solo interagire con la pagina tramite javascript ... Ma lo terrò a mente per altri progetti! –

+0

La soluzione migliore potrebbe essere quella di adottare il metodo elencato [here] (http://stackoverflow.com/a/2076345/1279409), quindi, e funziona in qualsiasi browser che abbia mai incontrato. –

7

questo:

$('.formElement').css({ 
     'display': 'block', 
     'width': '240px', 
     'position': 'relative', 
     'padding': '4px 0' 
    }); 
+0

È semplicemente difficile fare @media query in questo modo quando è necessario * – jfeust

2

La seconda opzione:

$('.formElement').css({ 
    'display': 'block', 
    'width': '240px', 
    'position': 'relative', 
    'padding': '4px 0' 
}); 

Questo è di gran lunga la soluzione più pulita!

2

utilizzare jQuery .css(propertyName, value)

$('.formElement').css({ 
    'display': 'block', 
    'width': '240px', 
    'position': 'relative', 
    'padding': '4px 0' 
}); 

questo è migliore tra le soluzioni che ci avete fornito.

TUTTAVIA vorrei andare per la creazione di una classe con tutto ciò che le proprietà dicono yourCSS e aggiungere la classe a quell'elemento:

$('.formElement').addClass('yourCSS'); 
10

Non mescolare CSS e JS insieme, soprattutto se le proprietà don' t contengono calcolato o valori dinamici: solo definire una classe CSS

.mystyle { 
    display: block; 
    width: 240px; 
    position: relative; 
    padding: 4px 0; 
} 

e impostare la classe

$('.formElement').addClass('mystyle'); 
+2

Che naturalmente porta la domanda, qual è il modo migliore per definire una nuova classe css con jquery? – BeniBela

+0

soluzione Fabrizio fa lo stesso di ciò che l'OP ha bisogno e fa lo stesso di entrambe le sue opzioni. Sarà più veloce di quelli pubblicati dall'OP. Invece di assegnare proprietà di stile a un elemento, sta aggiungendo una classe che contiene le proprietà di un elemento. Stessa cosa, migliore organizzazione del codice. –

+0

@ AndréSilva assolutamente. Siamo nel 2013, il tempo per il markup, il css e la zuppa di sceneggiature sono ormai lontani. :) – fcalderan

1

HTML

<style id="customCSS"> ... </style> 

JS

my_html += ' .formElement {'; 
my_html += '  display: block;'; 
my_html += '  width: 240px;'; 
my_html += '  position: relative;'; 
my_html += '  padding: 4px 0;'; 
my_html += ' }'; 
$('#customCSS').html(my_html) 
Problemi correlati