2011-03-01 82 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