使用.filter()选择包含带有jQuery的特定文本的tr的表行

时间:2013-06-20 19:56:14

标签: javascript jquery html dom web-applications

我正在尝试使用one函数选择包含td jQuery .filter()的表格中包含特定文本的行。我的功能看起来像这样......

function getBudgetRowByType(serviceTypeNum) {
        alert(serviceTypeNum);
        if (parseInt(serviceTypeNum) == 1) {
            var row = $('.bgTablePopUp > tbody > tr').filter(function () {
                $(this).children("td:contains('Instruction')");
            });
            return row;
        } else if (parseInt(serviceTypeNum) == 2) {
            var row = $('.bgTablePopUp > tbody > tr').filter(function () {
                $(this).children("td:contains('Research')");
            });
            return row;
        } else if (parseInt(serviceTypeNum) == 3) {
            var row = $('.bgTablePopUp > tbody > tr').filter(function () {
                $(this).children("td:contains('Administration')");
            });
            return row;
        } else {
            // Else nada
            return null;
        }
    }

html看起来像这样...

<table>
<tr>
<td>Instruction</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<tr>
<td>Research</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<tr>
<td>Administration</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
</table>

我一直得到一个未定义的结果,我不确定为什么......

2 个答案:

答案 0 :(得分:3)

像这样使用.filter - (其他条件相同

if (parseInt(serviceTypeNum) == 1) {
            var row = $('.bgTablePopUp > tbody > tr > td').filter(function () {
                    return $.trim($(this).text()) === "Instruction";
            }).closest('tr');
            return row;
        }

答案 1 :(得分:1)

这是一种POJS方式(IE9 +),否则需要Array.prototype.filter支持(有垫片),document.querySelectorsAll(但你可以使用其他DOM方法来获取{{} 1}}元素,或者它们是可用的垫片,你可以使用jquery来选择它们)和Node.textContent(再次使用垫片,或者只是遍历DOM并收集文本节点)。我认为很高兴看到替代方案,并且您已经为jQuery.filter问题选择了答案。您可能还会发现switch语句更适合您正在做的事情。

的Javascript

tr

jsfiddle