【问题标题】:jQuery: going through all visible rows of a tablejQuery:遍历表的所有可见行
【发布时间】:2010-12-13 22:33:18
【问题描述】:

我需要编写一些代码来循环遍历表的所有行,然后检查每行中的隐藏输入以查看它是否包含某个值,如果是,则设置一些值并隐藏该行。 这可能很笨拙,但它有效: (变量“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;
     }
}    

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

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

当然,必须有一种更好的方法来完成这个选择,而不会出现这种混乱的循环,只需使用一些 jQuery 更高级的机制,但恐怕这些都超出了我的能力范围。但我很乐意看到一些想法;)

【问题讨论】:

  • 如果您可以包含 HTML 示例,将会很有帮助。

标签: jquery visibility tablerow


【解决方案1】:

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

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

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

【讨论】:

  • 感谢 Ates,该示例为 jQuery 选择机制的强大功能提供了强有力的证明。然而,你关于隐藏和元素仍然被定位的评论并没有完全击中头部,这是并且已经被理解,但问题是为什么 zeile = zeile.next('tr:visible');不匹配下一个可见行。很抱歉这里没有提供示例,当前代码包含大量与此问题无关的控件。我将尝试制作该示例的简化版本...
猜你喜欢
  • 1970-01-01
  • 2015-05-18
  • 2013-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多