1

我需要编写一些代码来循环遍历表的所有行,然后检查每行中的隐藏输入以查看它是否包含某个值,如果是,则设置一些值并隐藏该行。它可能很笨拙,但它有效:(变量“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 的一些更高级的机制,但恐怕这些都超出了我的能力范围。但我很乐意看到一些想法;)

4

1 回答 1

1

当您只是隐藏一个元素时,它不会从文档流中取出。因此,它将继续被您的 DOM 查询定位。

在没有看到您的实际 HTML 的情况下,我只能推测您尝试完成的工作可以使用以下 jQuery 循环以更简单的方式完成:

$("tr input[value=" + mid + "]").each(function () {
    this.hide();
});
于 2009-11-06T18:10:33.110 回答