2014-02-12 65 views
1

我使用以下語法從TABLE中檢索元素。當包圍時jQuery對象失敗獲取元素

$("#table").children().children().children().html(); 

這給我的第一TD的內容。然後我轉移到第二個,發現使用下面的括號語法選擇它會給我一條錯誤消息,說明html()不是該對象的方法。

$("#table").children().children().children()[1].html(); 

相反,我不得不使用innerHTML的 peoperty代替,像這樣。

$("#table").children().children().children()[1].innerHTML; 

我的印象是我做錯了什麼。在獲得我想要的結果的同時,我不禁覺得有更多的建議方式可以解決這種問題。歡迎提出建議。

+1

如果你想遍歷所有'td's你也可以使用'$( 'TD')。每個(函數(){...}) ;'。如果你只關心第一個和第二個'td',並且已經有了第一個'td'的引用,那麼你可以使用'.next()'來獲取緊接其後的'td'。 – itsjeyd

+0

@itsjeyd其實,我正在做別的事情。我沒有迭代,但我不會去**第二**。我的目標是四個不同的元素,像143,237等索引。 –

+1

我明白了。在這種情況下,你已經得到的答案沒有任何補充;) – itsjeyd

回答

3

這是因爲html是一個jQuery函數,但[1]爲您提供了DOM元素。

您可以使用.eq(n)獲得第n個元素:

$("#table").children().children().children().eq(1).html(); 

...但如果你通過他們循環,這是非常低效的重複以上。相反,考慮each

$("#table").children().children().children().each(function() { 
    // Use $(this).html(); for each cell's contents 
}); 

更新在評論你說:

我針對與像143指數四個不同的元素,237等

在這種請記住最初的一組元素,然後根據需要使用.eq

var cells = $("#table").children().children().children(); 
cells.eq(143).html(...); 
cells.eq(237).html(...); 

你也可以考慮的東西,如果你調整你的表結構(例如,也許你添加一個colgrouprowgroup現在也有不同程度的)那是那麼脆弱:

var cells = $("#table td"); 
1

這是因爲當你使用索引來訪問元素時,它會返回一個dom元素引用而不是一個jQuery對象,所以.html()方法將不在那裏。

var first = $("#table").find('td').eq(0).html(); 
var second = $("#table").find('td').eq(1).html(); 

var $tds = $('#table td') 
var first = $tds.eq(0).html(); 
var second = $tds.eq(1).html();