2011-07-05 33 views
2

如何在下例中獲取下一行? (我試圖打印提供的ROWID的接下來的三個行/列的值)獲取表格中的下一行 - javascript

function printRowData(rowId) 
{ 
    var row=document.getElementById(rowId); 
    for(i=0; i<3 ; i++) 
    { 
     var column=row.getElementsByTagName("td"); 
     alert(column[0].innerText); 

     //now i want to move to the next row...something like row=row.next()????? 
    } 

} 

回答

8

如果你只是想下一行,而不是後續行,你可以這樣做:

var next = row.parentNode.rows[ row.rowIndex + 1 ]; 

所以,你的代碼看起來是這樣的:

function printRowData(rowId) { 
    var row=document.getElementById(rowId); 
    var idx = row.rowIndex; 
    for(i=0; i<4 ; i++) { 
     if(row) { 
      alert(row.cells[0].innerText); 
      var row = row.parentNode.rows[ ++idx ]; 
     } 
    } 
} 

從當前行得到.parentNode,然後從那裏訪問rows集合,並增加原始行的.rowIndex屬性以選擇下一個。

這需要處理空白問題。

還請注意,代替getElementsByTagName,我將其替換爲row.cells,它是行中單元格的集合。


編輯:忘了包括parentNoderows財產。儘管它被包含在描述中。固定。

+0

非常感謝傑森...但我想要至少三行或可能b更多,要印..第二,如果我做「row.rowIndex + 1」它跳過下一個直接行! – samach

+0

@Salman:它不會跳過下一行。爲了得到3行而不是1行,for循環是爲了?代碼究竟應該做什麼? http://jsfiddle.net/GbEEg/ – user113716

+0

...如果你想獲得給定行的第一個單元格內容,再加上兩個,[這裏是一個例子](http://jsfiddle.net/GbEEg/1/ )。 – user113716

0

嘗試使用nextSibling屬性:

row = row.nextSibling 

但需要注意的是空白在您的HTML源代碼可能會變成文本節點之間的行。您可能必須多次撥打nextSibling以跳過文本節點。

你有沒有考慮過使用jQuery?使用jQuery,您不必擔心文本節點:

row = $("#" + rowId); 
... 
row = row.next(); 
+0

不確定,但這可能取決於'表'的編碼方式。 'tr's之間的空格可以解釋爲'.nextSibling'。 –

+0

這將在兼容W3C的瀏覽器中打破。 – user113716

+0

@Jaso,@patrick:這是正確的,因爲我已經在我的更新的答案中說過。我不認爲jQuery會對其next()執行產生任何問題...... –

0

row = row.nextSibling。您可能需要在while循環中執行此操作,因爲您可能會遇到空白節點,因此應該檢查下一個節點是否具有正確的tagName。

0

如果您可以使用jQuery,那麼它變得非常簡單。

row.next(); 
+1

您不需要加載整個庫只是選擇表中的下一行。 – user113716

-1

使用document.getElementById(rowId).nextSibling

1

爲了避開與空白的問題,你現在可以使用

row = row.nextElementSibling 

只需確保檢查空當你在表的末尾,或者如果你有一個theadtbodytfoot它將在該特定節點的末尾。

如果您支持較舊的瀏覽器,則可能需要使用墊片。