0

当试图从所有 [tr] 中获取包含一些信息的第二个 [td] 时,我一直卡在逻辑上。这是一些例子。

<table class="todos">
 <tbody>
   <tr>
      <td>info1</td>
      <td>info2</td>
      <td>info3</td>
    </tr>
  </tbody>
</table>

这是为我找到它的Javascript...

$(".todos tbody tr").css('display','none');
$(".todos tbody tr").each(function(){
    if($(this).find("td:eq(0):contains("+procurar+")"))
        $(this).css('display','table-row');
    if($(this).find("td:eq(1):contains("+procurar+")"))
        $(this).css('display','table-row');
});
4

4 回答 4

0

您正在隐藏 parent tr,因此在 ' 上设置另一个显示属性td不会显示它们,但如果这不是预期的功能,我会这样做:

$(".todos tbody tr").hide().find('td:lt(2)').filter(function() {
    return $(this).text().indexOf(procurar) != -1;
}).closest('tr').css('display','table-row');
于 2013-04-01T14:37:51.027 回答
0

您似乎在第一个if条件下有语法错误,并且附近有一些错误代码:contains

这个可能对你有用

        var procurar = 'info2';
        $(".todos tr").css('display', 'none');
        $(".todos tbody tr").each(function () {
           if($(this).find('td:lt(2):contains("' + procurar + '")').length){
              $(this).css('display', 'table-row');
           }
        });
于 2013-04-01T14:49:14.877 回答
0

由于我看不到您的所有代码(例如:我不知道procurar等于什么),因此我设置了一个小示例,其中包含一些有效的硬编码值:

JavaScript

$(".todos tbody tr").each(function() {
    var $targetTDs = $(this).find("td:contains('info1')");

    if ($targetTDs.length > 1) {
        var $theSecondInstanceOfATDContainingInfo1 = $targetTDs[1];
    }
});

HTML

<table class="todos">
    <tbody>
        <tr>
            <td>info1</td>
            <td>info1</td>   // $theSecondInstanceOfATDContainingInfo1 is this one
            <td>info2</td>
        </tr>
        <tr>
            <td>info1</td>
            <td>info2</td>
            <td>info1</td>   // $theSecondInstanceOfATDContainingInfo1 is this one
        </tr>
        <tr>
            <td>info2</td>
            <td>info1</td>
            <td>info1</td>   // $theSecondInstanceOfATDContainingInfo1 is this one
        </tr>
    </tbody>
</table>

对于包含两个值为 的 TD 的每一行info1$theSecondInstanceOfATDContainingInfo1将捕获第二个 TD。

从您的原始代码中,我无法判断您是否真的需要匹配的 TD,或者您是否只需要知道它存在,但您可以调整此代码以处理任何一种情况。

于 2013-04-01T14:55:06.137 回答
0

如果你想得到至少有 2 个 [td]s 包含一些信息的 [tr]s,你应该在 :lt 之前使用 :contains。

HTML

<table class="todos">
    <tbody>
        <tr>
            <td>info1</td>
            <td>info2</td>
            <td>info3</td>
        </tr>
        <tr>
            <td>info1</td>
            <td>other</td>
            <td>info3</td>
        </tr>
        <tr>
            <td>info1</td>
            <td>other</td>
            <td>some other</td>
        </tr>
    </tbody>
</table>

JS:

var procurar = 'info';
$(".todos tr").css('display', 'none');
$(".todos tbody tr").each(function () {
    if ($(this).find('td:contains("' + procurar + '"):lt(2)').length > 1) {
        $(this).css('display', 'table-row');
    }
});

结果:

info1   info2   info3
info1   other   info3

http://jsfiddle.net/4Sj7t

否则,如果您想获得其第二个 [td] 包含一些信息的 [tr]s,您应该在 :contains 之前使用 :lt,如您的示例所示。

HTML

<table class="todos">
<tbody>
    <tr>
        <td>info1</td>
        <td>info2</td>
        <td>other</td>
    </tr>
    <tr>
        <td>info1</td>
        <td>other</td>
        <td>info2</td>
    </tr>
</tbody>

JS:

var procurar = 'info';
$(".todos tr").css('display', 'none');
$(".todos tbody tr").each(function () {
    if ($(this).find('td:lt(2):contains("' + procurar + '")').length > 1) {
        $(this).css('display', 'table-row');
    }
});

结果:

info1   info2   other

http://jsfiddle.net/4Sj7t/1/

于 2013-04-01T15:15:55.387 回答