2015-07-11 15 views
6

Ich migriere von PrototypeJS nach jQuery, und ich habe Probleme mit der Anwendung von Funktionalität auf neue DOM-Elemente in einem einfachen Banner-Skript hinzugefügt.jQuery show() keine Funktion - zum Hinzufügen von DOM-Elementen

Grundsätzlich werden beim Laden der Seite neue DIV-Elemente mit append() in das DOM eingefügt, so wie ich es verstehe, so wird es in jQuery im Gegensatz zum Element-Objekt von Prototype gemacht.

Bei der Überprüfung von Firebug wurden die Elemente erfolgreich zum DOM hinzugefügt und sofort ausgeblendet. Dann wird der erste (0) Element zeigen sollte ... aber geben Firebug mir diesen Fehler:

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

Ich bin sicher, dass dies etwas ist einfach, wie ich mit Prototype schon seit Jahren, aber müssen sich bewegen zu jQuery weil, naja ... mehr Leute benutzen es, damit die Ressourcen unendlich besser sind.

Gibt es einen grundlegenden Unterschied zwischen den beiden, die ich hier vermisse?

+0

statt '$ ('banner_slot '). Get (0) .show()', versuchen '$ mit ('. Banner_slot') [0 ] .show() ' –

+6

Verwenden Sie die richtige Methode, ersetzen Sie einfach' Get' mit 'eq' – adeneo

+2

... oder' .first() '. – JJJ

Antwort

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

Änderung

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

.get() kehrt DOM-Element, während .eq() jQuery Objekt zurückgibt und .show() ist jQuery API.

Weitere Informationen über .get() und .eq() Kasse der jQuery API docs

+2

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

+0

Vielen Dank! Dafür muss es eine offenere Erklärung geben. Ich wünschte, dass jQuery nur mit DOM-Elementen arbeiten könnte, anstatt diese verwirrenden Fehler zu verursachen. – Trev14

2

Sie benötigen

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

zu

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

Hinweis zu aktualisieren: get() gibt Ihnen ein DOM-Element und show() ist anwendbar auf jQuery-Objekt, daher müssen Sie es in jQuery konvertieren Objekt, um die Funktion zu verwenden.

+0

Kann jemand den Grund für die Abstimmung unten erklären? – nikhil

+4

Ich würde annehmen, dass es ist, weil Sie ein jQuery-Objekt haben, das Sie verwenden, um ein DOMElement zu erhalten, und es dann wieder in ein jQuery-Objekt zurückverwandeln, wenn Sie statt dessen '' eq() 'verwenden könnten. –

+0

@RoryMcCrossan - stimme zu. Ich wollte das Problem hervorheben und dann Notizen hinzufügen. – nikhil