2015-07-11 56 views
6

我正在從PrototypeJS遷移到jQuery,並且遇到了將功能應用於添加到簡單的橫幅腳本中的新DOM元素的問題。jQuery show()不是一個函數 - 用於添加DOM元素

基本上,在頁面加載時,使用append()將新的DIV元素放置到DOM中,據我所知,這是在jQuery中完成的,與Prototype的Element對象相反。

$.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時,元素已成功添加到DOM,並立即隱藏。然後第一個(0)元素應該顯示......然而,螢火蟲給我這個錯誤:

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

我敢肯定,這是簡單的東西,因爲我一直在使用原型多年,但需要移動到jQuery,因爲,更多的人使用它,所以資源無限更好。

我在這裏失蹤的兩者之間有一些根本的區別嗎?

+0

,而不是'$( 'banner_slot ')。得到(0).show()',請嘗試使用'$('。banner_slot')[0 ] .show()' –

+6

使用正確的方法,只需將'get'替換爲'eq' – adeneo

+2

...或'.first()'。 – JJJ

回答

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

變化到

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

.get()返回DOM元素而.eq()返回jQuery對象和.show()是jQuery的API。

更多有關.get().eq()結賬jQuery API docs

+2

請參閱:https://stackoverflow.com/questions/4709660/jquery-eq-vs-get – heartyporridge

+0

謝謝!對此需要有一個更明顯的解釋。我希望jQuery可以只使用DOM元素,而不是導致這些令人困惑的錯誤。 – Trev14

2

您需要更新

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

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

注意get()給你一個DOM元素和show()適用jQuery的對象,因此,你需要將其轉換成的jQuery對象使用該功能。

+0

有人可以解釋投票的理由嗎? – nikhil

+4

我假設這是因爲你有一個jQuery對象,你用它來獲得一個DOMElement,然後再次把它重新轉換成一個jQuery對象,而你可以使用'eq()'。 –

+0

@RoryMcCrossan - 我同意。我想強調這個問題,然後添加註釋。 – nikhil

相關問題