2010-03-22 5 views
10

Sto usando il codice JS sotto per modificare la classe quando si fa clic su un collegamento.Come posso impostare correttamente la classe attr w/JavaScript su IE, FF, Chrome, ecc.?

document.getElementById("gifts").setAttribute("class", "gkvSprite selected"); 

Questo non funziona in IE ma lo fa in FF e Chrome. Quindi ho cambiato il codice in:

document.getElementById("gifts").setAttribute("className", "gkvSprite selected"); 

Quindi ha funzionato in IE, ma ha smesso di funzionare in FF e Chrome.

Qualcuno potrebbe aiutarmi a venire qui?

+0

il tuo titolo è ingannevole, getElementById sta funzionando bene, il tuo problema è con la gestione di IE dell'attributo di classe. – SpliFF

risposta

14

È possibile utilizzare in modo affidabile la proprietà className invece di setAttribute:

document.getElementById("gifts").className = "gkvSprite selected"; 

Più in generale, ci sono un paio di nomi degli attributi che diversi browser trattano in modo diverso in setAttribute: class vs className, e for vs. htmlFor. Le librerie come Prototype, jQuery e simili elimineranno queste differenze per te, sebbene (di nuovo) nella specifica situazione di class, puoi invece utilizzare la proprietà in modo affidabile.

+0

Grazie per il tuo aiuto :) – Alloi

1

Si può andare su questo in alcuni modi.

Se si desidera utilizzare setAttribute è possibile rilevare quale browser utilizza il client e quindi utilizzare class in IE e classname in Firefox.

Quanto sopra funzionerebbe ma preferirei usare un div e assegnare una nuova classe per quello.

somediv.className='gkvSprite selected' 

O come T.J. Crowder ha detto sopra. Asign via Classname direttamente.

+1

Riguardo al rilevamento del browser: in almeno il 90% di queste situazioni, stai molto meglio con "rilevamento delle funzionalità" piuttosto che con lo sniffing del browser. In questo caso, ad esempio, Prototype verifica se il * browser corrente che stai usando * utilizza 'class' o' className' (testandolo una volta e ricordando cosa è successo). Lo sniffing del browser è soggetto a guasti in vari modi, non ultimo il fatto di diventare obsoleto man mano che i browser si evolvono. Si finisce con enormi catene logiche attorno alla versione del browser e del browser ... –

0

Se #gifts ha una transizione temporizzata CSS3 impostata in CSS, setAttribute (e removeAttribute e altri comandi js) non riesce in alcuni browser. Il javascript deve essere posticipato fino alla transizione prima che possa modificarlo.

Problemi correlati