jQuery错误?如何获取所有可见行中第一个"td"?

7

我有一个表格,并且我隐藏了一些行。我想要获取所有显示行中的第一个td。我有以下语句:

$("table.SimpleTable tbody tr:visible td:first-child");

这在FireFox中可以正常工作,但在IE中不行。有什么想法吗?

4个回答

6
那应该可以。用这样的HTML看起来像这样:
<table class='SimpleTable'> 
  <tr style='display: none;'> 
    <td>test1</td> 
  </tr> 
  <tr> 
    <td>test2</td> 
  </tr> 
  <tr> 
    <td>test3</td> 
  </tr> 
  <tr style='display: none;'> 
    <td>test4</td> 
  </tr> 
  <tr> 
    <td>test5</td> 
  </tr> 
  <tr> 
    <td>test6</td> 
  </tr>   
</table>

做这个:
$("table.SimpleTable tbody tr:visible td:first-child").css('color','red');

对于我来说,在Firefox和IE7中会显示红色。你的HTML是什么样子?

这是我测试过的HTML

编辑: 对于我来说,你现在所做的事情非常奇怪。你应该能够用以下代码替换你现有的代码:

var serials = [];
$("table.SimpleTable tbody tr:visible td:first-child").each(function() {
    serials.push($.trim($(this).text()));
});
var serials = serials.join(',');

如果TD是从选择器中填充的,它们应该只是可见的。如果您在序列中获取了隐藏的TD(我必须强调,这确实不应该发生,并且是一个错误或某处出现错误的迹象),请尝试使用此选择器:
$("table.SimpleTable tbody tr:not(:hidden) td:first-child")

当我有机会时,我会尝试你提到的选择器。不过,我更喜欢serails.push()和serials.join(","),比我现在用的要好得多,我一定会实现它们。谢谢。 - runxc1 Bret Ferrier

6

我正在点击事件上运行代码。你写的HTML基本上是正确的,但由于一些我不知道的原因它没有起作用。不过我已经找到了一个解决办法。(我试图获取可见行第一个单元格中所有值的逗号分隔字符串)无论如何,以下解决办法可以完成任务。

    var notfirst = false;
    var serials = "";
    var tds = $("table.SimpleTable tbody tr:visible td:first-child");
    for (var i = 0; i < tds.length; i++) {
        var td = $(tds[i]);
        if (td.is(":hidden"))
            continue;
        if (notfirst)
            serials += ",";
        else
            notfirst = true;

        serials += $.trim(td.text());
    }

由于某种原因,在IE7中:hidden标签可以正常工作,但:visible标签却不能。

3
为什么不把它分开一点呢?
$("table.SimpleTable").find("tr:visible").find("td:first-child").text()

?


3

从文档中得知:

“在jQuery 1.3.2中,:visible的计算方式已更改。如果元素及其父元素在文档中占用空间,则假定该元素可见。不考虑CSS可见性。”

也许这与此有关。尝试使用类选择器或其他方法,而不是tr:visible。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接