jQuery:遍历表的所有可见行

时间:2009-11-06 17:57:36

标签: jquery visibility tablerow

我需要编写一些代码来循环遍历表的所有行,然后检查每行中的隐藏输入以查看它是否包含某个值,如果是,则设置一些值并隐藏该行。 它可能很笨拙,但它有效: (变量“zeile”包含第一行,在循环之前正确初始化):

while (goon) {
  var hf = zeile.attr('id');
  if (hf) {
      hf = document.getElementById(hf.substr(0,hf.length-2) + 'hfMat');
      if (hf.value == mid) {
          found=true;
          goon=false;
          zeile.hide();
     } else {
         cnt +=1 ;
         if (cnt<10) {
               alert('not found, cnt=' + cnt);
            } else {
               goon=false;
         }
       }
     }

     if (goon) {
        zeile = zeile.next('tr');
        goon=zeile.length>0;
     }
}    

好的,首先,第4行document.getElementById(hf...)看起来像是承认失败而且可能是 - 但$("#"+hf).val()只是不会这样做,返回undefined :(

正如我所说,这段代码运行正常。但是我有一个案例,其中两行在hfMat字段中包含相同的值,然后我的脚本将再次隐藏第一行,而它应该继续到第二行。我想,“简单”,并改进了语句以确定要处理的下一行(从结尾开始的第4行),因此我从zeile = zeile.next('tr');更改为zeile = zeile.next('tr:visible'); 但是,使用jQuery 1.3.2,这不起作用,我得到了未定义。我做错了什么?

当然,通过简单地使用一些jQuery更先进的机制,必须有一个更好的方法来完成这个选择,而不需要这么混乱的循环,但我担心这些超出了我的范围。但我很高兴看到一些想法;)

1 个答案:

答案 0 :(得分:1)

当您只是隐藏元素时,它不会从文档流中删除。因此,它将继续通过您的DOM查询找到。

如果没有看到您的实际HTML,我只能推测您尝试完成的内容可以通过以下jQuery循环以更简单的方式完成:

$("tr input[value=" + mid + "]").each(function () {
    this.hide();
});