Javascript jQuery选择多个:n-child()
这是我的桌子,使用tr和tdJavascript jQuery选择多个:n-child(),javascript,jquery,jquery-selectors,selection,Javascript,Jquery,Jquery Selectors,Selection,这是我的桌子,使用tr和td NAME Address CITY STATE ABC 123 A CA AB8 123 B CA AFC 456 B TX POI 985 C KJ 文档准备就绪后,它将隐藏所有已存在的文档 现在,我需要一行代码来显示所有tr: ->第(4)列=CA“和第(3)列=B 我厌倦了我的代码: $("table[id=maintablex] tr td:nth-child(4):contai
NAME Address CITY STATE
ABC 123 A CA
AB8 123 B CA
AFC 456 B TX
POI 985 C KJ
文档准备就绪后,它将隐藏所有已存在的文档
现在,我需要一行代码来显示所有tr:
->第(4)列=CA“和第(3)列=B
我厌倦了我的代码:
$("table[id=maintablex] tr td:nth-child(4):contains('CA'), table[id=maintablex] tr td:nth-child(3):contains('B')").closest('tr').show();
但它表明每样东西都有(4)=CA和(3)=B。。。我的代码是“或”,有人能帮我这个吗
添加了完整的HTML代码:
<table id="table">
<tr>
<td>ABC</td>
<td>123</td>
<td>A</td>
<td>CA</td>
</tr>
<tr>
<td>ABC</td>
<td>1234</td>
<td>B</td>
<td>CA</td>
</tr>
<tr>
<td>AUF</td>
<td>123</td>
<td>C</td>
<td>TX</td>
</tr>
<tr>
<td>ABC</td>
<td>456</td>
<td>B</td>
<td>TX</td>
</tr>
</table>
<script language="Javascript">
$("table[id=table] tr").hide();
// Code show here
</script>
为什么不这样做:
$("table[id=maintablex] tr td:nth-child(3):contains('B')",
$("table[id=maintablex] tr td:nth-child(4):contains('CA')")
).closest('tr').show();
我不知道这是否更快,但根据@Jasper的回答,为什么不这样做:
//select the table, find all `<td>` elements that contain `CA` and iterate through each of them
$('#table')
.find('td:nth-child(4):contains("CA")')
.closest('tr')
.find('td:nth-child(3):contains("B")')
.closest('tr')
.addClass('active');
//选择该表,找到包含'CA'的所有``元素,并对每个元素进行迭代
$('\35;表')
.find('td:n子(4):包含(“CA”))
.最近的('tr')
.find('td:n子项(3):包含(“B”))
.最近的('tr')
.addClass(“活动”);
这是jsiddle:JS--
更新
我更新了上面的代码,只在每行中查找第三列(之前我省略了答案的这一部分)
这里有一个jsfiddle:您的第一个选择器总是匹配State=CA和State=B的行。 我会把它分成两部分。尚未测试此代码,但它应该可以让您接近
var stateRows = ("#maintablex tr td:nth-child(4):contains('CA')").parent();
var matchRows = stateRows.find("td:nth-child(3):contains('B')").parent();
matchRows.doWhateverYouLikeWithTheResults();
试试这个
$.each($('table#table tr td:nth-child(4):contains("CA")').parent(),function(){
if(($.inArray(this, $('table#table tr td:nth-child(3):contains("B")').parent())) > -1){
$(this).show();
}
});
希望这有帮助。:) 我建议将
表[id=maintablex]
替换为#maintablex
,它将执行得更快。这里有一个jsperf来证明:是的,添加#table,它运行得更快。tybro,但是这个表将有500-1000行。那么,使用.each()是否仍然很快?我想。每个循环都会变慢,这就是为什么我想尝试使用jQuery进行1选择。是的,现在它可以工作了。但我不知道它是否更快。但是我喜欢。。我真的不喜欢循环$eachnat代码,它很容易在Firebug中测试。我只需要修改引用。
/*Hide all the table rows by default*/
tr {
display : none;
}
/*declare a class that shows the table rows when added to them*/
tr.active {
display : table-row;
}
var stateRows = ("#maintablex tr td:nth-child(4):contains('CA')").parent();
var matchRows = stateRows.find("td:nth-child(3):contains('B')").parent();
matchRows.doWhateverYouLikeWithTheResults();
$.each($('table#table tr td:nth-child(4):contains("CA")').parent(),function(){
if(($.inArray(this, $('table#table tr td:nth-child(3):contains("B")').parent())) > -1){
$(this).show();
}
});