2015-07-11 16 views
6

PrototypeJS'den jQuery'ye geçiş yapıyorum ve basit bir banner komut dosyasına eklenen yeni DOM öğelerine işlevsellik uygulamakla ilgili sorunlar yaşıyorum.jQuery show() bir işlev değil - DOM öğeleri eklerken kullanılan

Temel olarak, sayfa yüklendiğinde, yeni DIV öğeleri DOM'a append() kullanılarak yerleştirilir, anladığım gibi, Prototype'ın Element nesnesinin aksine jQuery'de bu şekilde yapılır.

$.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(); 

Firebug denetlendikten sonra, öğeler başarıyla DOM'a eklenmiştir ve hemen gizlenmiştir. Ben yıllardır prototip kullanarak oldum gibi bu bir şey basittir eminim ama taşımak gerekir

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

: Sonra ilk (0) eleman göstermeli ... Ancak Kundakçı bana bu hata vermek jQuery için, çünkü ... daha fazla kişi kullanır, bu yüzden kaynaklar sonsuz derecede iyidir.

Burada eksik olan ikisi arasında temel bir fark var mı?

+0

('banner_slot '). get (0) .show()', '$ kullanmayı deneyin ('. banner_slot') [0 ] .show() ' –

+6

Uygun yöntemi kullanın,' '' '' eq' – adeneo

+2

... veya '.first()' ile değiştirin. – JJJ

cevap

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

değişiklik

için
$('.banner_slot').eq(0).show(); 

.get() döner DOM öğesi .eq() jQuery nesnesi döner ve .show() jQuery API iken. Daha fazla bilgi için

yaklaşık .get() ve .eq() çıkış yerine $ `arasında jQuery API docs

+2

Bakın: https://stackoverflow.com/questions/4709660/jquery-eq-vs-get – heartyporridge

+0

Teşekkür ederiz! Bunun daha açık bir açıklaması olmalı. Keşke jQuery bu kafa karıştırıcı hatalara neden olmak yerine sadece DOM öğeleriyle çalışabilir. – Trev14

2

Sen

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

Not

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

güncellemek gerekir: get() size bir DOM Eleman verir ve show() jQuery nesne üzerinde uygulanabilir, bu nedenle buna jQuery dönüştürmek gerekir işlevi kullanmak için nesne.

+0

Birisi aşağı oy kullanma nedenini açıklayabilir mi? – nikhil

+4

Bunun nedeni, bir DOMElement almak için kullandığınız bir jQuery nesnesine sahip olduğunuzdan, jQuery nesnesine tekrar bir jQuery nesnesine dönüştürdüğünüzden, bunun yerine yalnızca "eq()' yi kullanabileceğinizi farz ediyorum. –

+0

@RoryMcCrossan - Katılıyorum. Sorunu vurgulamak ve sonra not eklemek istedim. – nikhil