Jquery .eq plus包含

时间:2013-04-01 14:32:40

标签: javascript jquery

当试图从包含一些信息的所有[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 个答案:

答案 0 :(得分:0)

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

$(".todos tbody tr").hide().find('td:lt(2)').filter(function() {
    return $(this).text().indexOf(procurar) != -1;
}).closest('tr').css('display','table-row');

答案 1 :(得分: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');
           }
        });

答案 2 :(得分: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>

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

从您的原始代码中,我无法确定您是否确实需要匹配的TD,或者您只是需要知道它存在,但您可以调整此代码来处理这两种情况。

答案 3 :(得分:0)

如果你想获得至少有2 [td]个包含你应该使用的信息的[tr]:包含之前:lt。

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]:在你的例子中,在之前:包含。

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/