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了解更多信息-->
哦,这是一个很酷的解决方案,我将不得不更仔细地阅读它,有些东西我以前没有见过。谢谢你,伙计!哦,这是一个很酷的解决方案,我将不得不更仔细地阅读它,有些东西我以前没有见过。谢谢你,伙计!