2016-05-20 141 views
2

雖然試圖獲得更好的理解JQuery我碰到這個question鏈接方法返回的JQuery對象

我得到了什麼,從它的JQuery選擇返回數組狀結構,你可以遍歷像一個數組來了。我的問題是我在什麼情況下可以做這樣的事情:

$('.foo')[1].someFunction(); 

,而不會導致錯誤:$(...)[1].someFunction is not a functionsomeFunction是指像appendTo()text()定義JQuery功能)。

此外,爲什麼它會導致一個錯誤,最好的方法(如果可能的話)使用[]符號後鏈接一個函數?

回答

2

你可以做一些類似$('.foo').first()$('.foo').eq(1),這是訪問jQuery選擇器結果的更習慣的方式。

作爲@Amit筆記,底層數組結構中的對象是本機DOM元素。在jQuery方法鏈中使用它們的愚蠢但有啓發性的方式是$($('.foo')[1]).whatever()

獲得評論中提出的問題時,本機DOM元素擁有自己的(相當大的)一組可以在其上調用的方法。例如,所有HTML元素都有this very much worth knowing interface可用,並且每種特定類型的元素都有它自己的擴展。

+0

你可以看看我在評論部分詢問@Amit的問題嗎? – webDev

+0

+0

@webDev爲我的答案添加了更多文檔。整個網站是真正獲得對HTML/CSS/JS的理解,它們如何相互作用以及可以做什麼和不可以做什麼的巨大資源。 –

3

under what circumstances can I do something like this:

$('.foo')[1].someFunction(); 

任何情況下。 「數組」中的對象是本地DOM對象,它們不支持jQuery函數。

+0

我見過人們做這樣的事情:'$('。foo')[0] .play()'並且它工作。我知道'play()'是一個js函數。這就是爲什麼它有效嗎? – webDev

+0

我不知道你見過什麼。 – Amit

+0

http://stackoverflow.com/questions/2988050/html5-audio-player-jquery-toggle-click-play-pause。尋找@edwardsharp的回覆 – webDev

1

當您使用數組選擇器訪問jQuery對象時,將返回DOM元素。由於它不再是jQuery對象,它將不再有權訪問jQuery的方法和屬性。

您可以嘗試使用類似$('.foo').eq(1)之類的東西,然後將jQuery鏈接關閉。