Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用.filter()通过jQuery选择包含带有特定文本的tr的表行_Javascript_Jquery_Html_Dom_Web Applications - Fatal编程技术网

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

Javascript 使用.filter()通过jQuery选择包含带有特定文本的tr的表行,javascript,jquery,html,dom,web-applications,Javascript,Jquery,Html,Dom,Web Applications,我正在尝试使用jQuery.filter()函数选择表中包含特定文本的onetd的行。我的函数看起来像这样 function getBudgetRowByType(serviceTypeNum) { alert(serviceTypeNum); if (parseInt(serviceTypeNum) == 1) { var row = $('.bgTablePopUp > tbody > tr').filter(functio

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

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>

指示
...
...
...
研究
...
...
...
管理
...
...
...

我一直得到一个未定义的结果,我不知道为什么…

像这样使用
.filter
(其他条件也一样)


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


这里是一种POJS方法(IE9+),否则需要支持(其中有垫片),(但您可以使用其他DOM方法获取
tr
元素,或者它们的垫片可用,您可以使用事件jquery来选择它们)和(垫片也可用,或者只需遍历DOM并收集文本节点)。我认为看到替代方案是很好的,您已经为您的问题选择了一个答案。你也可能会发现使用语句对你所做的事情更有帮助

Javascript

function contains(elements, string) {
    return Array.prototype.filter.call(elements, function (tr) {
        return tr.textContent.indexOf(string) !== -1;
    });
}

function getBudgetRowByType(serviceTypeNum) {
    var row = null,
        selector = "table tr";

    switch (parseInt(serviceTypeNum)) {
        case 1:
            row = contains(document.querySelectorAll(selector), "Instruction");
            break;
        case 2:
            row = contains(document.querySelectorAll(selector), "Research");
            break;
        case 3:
            row = contains(document.querySelectorAll(selector), "Administration");
            break;
        default:
    }

    return row;
}

console.log(getBudgetRowByType("1"));
console.log(getBudgetRowByType("2"));
console.log(getBudgetRowByType("3"));
console.log(getBudgetRowByType("4"));

上,这里有一个POJS方法(IE9+),否则需要支持(其中有垫片),(但是您可以使用其他DOM方法来获取
tr
元素,或者它们的垫片可用,您可以使用事件查询来选择它们)和(垫片也可用,或者只需遍历DOM并收集文本节点)。我认为看到替代方案是很好的,您已经为您的问题选择了一个答案。你也可能会发现使用语句对你所做的事情更有帮助

Javascript

function contains(elements, string) {
    return Array.prototype.filter.call(elements, function (tr) {
        return tr.textContent.indexOf(string) !== -1;
    });
}

function getBudgetRowByType(serviceTypeNum) {
    var row = null,
        selector = "table tr";

    switch (parseInt(serviceTypeNum)) {
        case 1:
            row = contains(document.querySelectorAll(selector), "Instruction");
            break;
        case 2:
            row = contains(document.querySelectorAll(selector), "Research");
            break;
        case 3:
            row = contains(document.querySelectorAll(selector), "Administration");
            break;
        default:
    }

    return row;
}

console.log(getBudgetRowByType("1"));
console.log(getBudgetRowByType("2"));
console.log(getBudgetRowByType("3"));
console.log(getBudgetRowByType("4"));

上,我不明白为什么我的原始代码不起作用。如果DOM查询找到这样的子级,它不会返回true吗?我的意思是,如果我添加了return关键字…@masstrike No,则需要显式返回true或false。您可以参考api了解更多信息
-->
但是,我不明白为什么我的原始代码不起作用。如果DOM查询找到这样的子级,它不会返回true吗?我的意思是,如果我添加了return关键字…@masstrike No,则需要显式返回true或false。您可以参考api了解更多信息
-->
哦,这是一个很酷的解决方案,我将不得不更仔细地阅读它,有些东西我以前没有见过。谢谢你,伙计!哦,这是一个很酷的解决方案,我将不得不更仔细地阅读它,有些东西我以前没有见过。谢谢你,伙计!