2015-07-11 13 views
6

Sto migrando da PrototypeJS a jQuery e sto riscontrando problemi con l'applicazione di funzionalità ai nuovi elementi DOM aggiunti in un semplice script di banner.jQuery show() non una funzione, utilizzata per aggiungere elementi DOM

Fondamentalmente, al caricamento della pagina, nuovi elementi DIV vengono inseriti nel DOM utilizzando append(), come ho capito, questo è il modo in cui è fatto in jQuery in contrasto con l'oggetto Elemento di Prototype.

$.each(Banner.data, function(i, e) { 
    $('#banner_area').append("<div class='banner_slot' id='bannner-"+ i +"'>...[nested elements]</div>").hide(); 
    }); 
$('.banner_slot').get(0).show(); 

Al momento del check Firebug, gli elementi sono stati aggiunti con successo al DOM, e vengono immediatamente nascosto. Poi il primo (0) elemento dovrebbe mostrare ... tuttavia, Firebug dammi questo errore:

TypeError: $(...).get(...).show is not a function 
http://www.ten103.com/javascript/global_desktop.js 
Line 15 

Sono sicuro che questo è qualcosa di semplice, come ho usato Prototipo per anni, ma hanno bisogno di muoversi a jQuery perché, beh ... più persone lo usano così le risorse sono infinitamente migliori.

C'è qualche differenza fondamentale tra i due che mi manca qui?

+0

invece di '$ ('banner_slot '). Get (0) .Show()', provare a utilizzare '$ ('. Banner_slot') [0 ] .show() ' –

+6

Utilizzare il metodo corretto, basta sostituire' get' con 'eq' – adeneo

+2

... o' .first() '. – JJJ

risposta

8
$('.banner_slot').get(0).show(); 

cambiamento a

$('.banner_slot').eq(0).show(); 

.get() rendimenti elemento DOM mentre .eq() restituisce oggetto jQuery e .show() è jQuery API.

Per ulteriori informazioni su .get() e .eq() check-out il jQuery API docs

+2

Vedere: https://stackoverflow.com/questions/4709660/jquery-eq-vs-get – heartyporridge

+0

Grazie! C'è bisogno di una spiegazione più ovvia per questo. Vorrei che jQuery potesse lavorare anche con gli elementi DOM invece di causare questi errori confusi. – Trev14

2

È necessario l'aggiornamento

$('.banner_slot').get(0).show(); 

a

$($('.banner_slot').get(0)).show(); 

Nota: get() ti dà un elemento DOM e show() è applicabile su oggetto jQuery, quindi, è necessario convertirlo in jQuery oggetto di utilizzare la funzione.

+0

Qualcuno può spiegare il motivo del voto negativo? – nikhil

+4

Suppongo che sia perché hai un oggetto jQuery, che usi per ottenere un DOMElement, quindi lo riattivi nuovamente su un oggetto jQuery, quando invece potresti semplicemente usare 'eq()'. –

+0

@RoryMcCrossan - Sono d'accordo. Volevo evidenziare il problema e quindi aggiungere note. – nikhil

Problemi correlati