2011-03-01 124 views
0

我將如何重寫此函數,以便隱藏的行完全被忽略?忽略隱藏的行

function stripeRows(table) { 
    var numRows = table.rows.length; 
    for (var i = 1; i < numRows; i++) { 
     var ID = table.rows[i].id; 
     if (i % 2 == 0) { 
      table.rows[i].className = "GridRow"; 
     } 
     else { 
      table.rows[i].className = "GridRowAlt"; 
     } 
    } 
} 
+0

你怎麼隱藏你的行? CSS?然後,您可以測試適當的樣式設置。 – 2011-03-01 11:08:26

+0

我使用$(「#row」)將我的行隱藏在另一個函數中。 – user517406 2011-03-01 11:10:39

+0

由於您使用javascript隱藏它,因此使用選擇器設置交替類的行樣式。刪除了我的答案,因爲我認爲你將它隱藏在服務器端。 – stefan 2011-03-01 11:12:33

回答

0

但是,如果您檢測到隱藏的行,則必須至少將您的計數器從行索引中去耦,例如,通過for(... in ...)。如果你發現一個隱藏的行,繼續你的循環:

var i = 0; 
for (var row in table.rows) { 
    if(row.style.visibility == 'hidden') 
    // or similar (see other answers), e.g.: if($('#element_id:visible').length > 0) 
     continue; 

    var ID = row.id; 
    if (i % 2 == 0) { 
     row.className = "GridRow"; 
    } 
    else { 
     row.className = "GridRowAlt"; 
    } 
    ++i; 
} 
+0

這給了我錯誤'row.style is undefined' – user517406 2011-03-01 11:52:37

+0

這只是一個示例代碼,因爲我的觀點並不是如何檢測隱藏的行(請參閱Andrea的答案),但如何你將不得不改變你的for循環來讓這個工作。希望我能夠幫助! – 2011-03-01 11:56:34

2

編輯:原來我的建議,使用CSS將無法正常工作 - 去身影......在任何情況下,你可以使用jQuery

$('tr:visible:odd').addClass('even'); 
$('tr:visible:even').addClass('odd'); 

(注意反轉,因爲jQuery從0開始計數)。根本不需要循環! :-)

See it working

+0

這也會忽略隱藏的行嗎? – 2011-03-01 11:17:00

+0

我幾乎肯定是的,但我沒有檢查。 – Andrea 2011-03-01 11:18:09

+0

這是否需要在循環內部進行,以便我可以引用我的表格對象? – user517406 2011-03-01 12:03:51