Jquery 为什么我的心是隐藏的<;tr>;不是真的隐藏吗?

Jquery 为什么我的心是隐藏的<;tr>;不是真的隐藏吗?,jquery,visible,Jquery,Visible,我有一个从经典asp生成的简单html标记: <table> <tr class="trClass"> <td>Hello </td> </tr> <tr class ="trClass"> <td>World!</td> </tr> </table> 你好 世界! 如果我使用Jquery将属于Hello的tr设置为hide(),它将隐藏

我有一个从经典asp生成的简单html标记:

<table>
  <tr class="trClass">
    <td>Hello </td>
  </tr>
  <tr class ="trClass">
    <td>World!</td> 
  </tr>
</table>

你好
世界!
如果我使用Jquery将属于Hello的tr设置为hide(),它将隐藏。好!

但是,当我使用这个$('.trClass:visible').each(function(){alert('visible')})时; 它两次显示输出“可见”

为什么会这样

我这里的问题是,我用一个选择框过滤列上的表。但是在过滤之后,我需要对表中可见的行执行一些计算,但是我现在得到了所有的行

有什么想法吗


/Daniel

可见的选择器不测试要使用的显示样式属性:

…如果元素的CSS显示为 “无”,或其任何父/祖先 元素的显示为“无”,或者 元素的宽度为0,元素的 高度为0时,将创建一个元素 据报道是隐藏的

这些选项将正确选择您的可见行:

$('.trClass:not(:hidden)').each(function() { 
    alert('visible'); 
});
或:

或:

hide
将样式设置为
display=“none”
。jQuery 1.3.2的版本还说:

在jQuery 1.3.2中,元素是可见的 如果其浏览器报告了偏移网络宽度或 越界大于0


因此,我猜在这种情况下,
:visible
选择器错误地不匹配任何内容,因为根据执行的计算,行没有占用任何空间,尽管它们的CSS
display
属性没有设置为
none
。相反,
:hidden
正确地将元素与
style=“display:none”
匹配,因此测试非
:hidden
元素效果很好。

不确定这是否重要,但不隐藏()设置
display:none和不可见:隐藏?这意味着隐藏的行仍然可见,只是没有显示…

您的trClass很可能与显示冲突:无.hide()设置。 当标记同时具有“类属性”和“样式属性”时,将应用“仅启用”。 你应该把你的trClass分成几个部分,然后从中取出display:stuff.

。它在1.3.2中被破坏了,但是现在

:

我们已经在寻找“tr”的案例 在IE中也有同样的问题


您想知道……

您可以提供演示页面plz吗?
:hidden
:visible
都不检查显示属性。自己检查源代码:这是一个合法的错误,根据Resig hights:Nice edit(删除downvote),尽管您仍然暗示
:hidden
检查
display
属性。@spx2:1.3.2中的回归。以前的版本检查了
显示
属性。1.3.2使用技巧检查元件的[缺少]尺寸。请参阅@karim79的第一句话。@spx2-和往常一样,这是程序员的话。
$('.trClass').each(function() { 
    if(!$(this).is(':hidden')) {
        alert('visible'); 
    }
});
$('.trClass').filter('not:(:hidden)').each(function() { 
    alert('visible');
});