Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.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 jQuery选择多个:n-child()_Javascript_Jquery_Jquery Selectors_Selection - Fatal编程技术网

Javascript jQuery选择多个:n-child()

Javascript 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

这是我的桌子,使用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):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();
    }
});