我有这样的表:
<table>
<tr>
<td>Adresse IP</td>
<td class='tdSoap'>10.2.3.4</td>
</tr>
<tr>
<td>Zobi</td>
<td class='tdSoap'>blabla</td>
</tr>
<tr>
<td>Adresse</td>
<td class='tdSoap'>NYC</td>
</tr>
</table>
我希望获得“NYC”值,通过选择具有“Adresse”的TD的TR,而不是“Adresse IP”。
我已经用这段代码做了我想要的事情:
$("table tr:has(td:contains('Adresse'))").not(":contains(Adresse\u00a0IP)").find("td.tdSoap").text();
但是,我用这种代码尝试了很多,但从未成功:
$("table tr:has(td:contains('Adresse'):not(':contains(Adresse\u00a0IP)')) td.tdSoap").text();
PS:“\ u00a”被认为是http://bugs.jquery.com/ticket/3450
答案 0 :(得分:3)
$("table tr td:contains('Adresse')").not(':contains(Adresse\u00a0IP)').next('.tdSoap').text();
为什么这不起作用:(你有什么)
$("table tr:has(td:contains('Adresse'):not(':contains(Adresse\u00a0IP)')) td.tdSoap").text();
jQuery在选择器中使用了一个向右的权利,所以想一想:
现在,这也可以取出“has”并添加下一个:
$("table tr td:contains('Adresse'):not(':contains(Adresse\u00a0IP)')").next("td.tdSoap").addClass('myfirst');
但是,运行一些性能指标并查看哪些更快:
$('table').find('tr').find('td:contains("Adresse")').not(':contains("Adresse\u00a0IP")').next('.tdSoap').text();
$('table').find('.tdSoap').prev(':contains(Adresse)').not(':contains(Adresse\u00a0IP)').next().text();
$("table tr td:contains('Adresse'):not(':contains(Adresse\u00a0IP)')").next('td.tdSoap').text();
$("table tr:has(td:contains('Adresse'))").not(":contains(Adresse\u00a0IP)").find("td.tdSoap").text();
$("table tr td:contains('Adresse')").not(':contains(Adresse\u00a0IP)').next('.tdSoap').text();
注意:如果你有更多“组”,那些人会得到所有这些文本,但不确定你是否想要所有这些,但这就是你所拥有的。
编辑:这可以使用或不使用 
$('table').find('tr').find('td:contains("Adresse")').not(':contains("Adresse\u00a0IP")').not(':contains("Adresse IP")').next('.tdSoap').text();
答案 1 :(得分:0)
如果您无法修改HTML,那么这应该可以解决问题:
$('table tr:has(td:contains("Adresse"):not(:contains("Adresse IP"))) td.tdSoap').text()
否则,我建议尝试一下Mahmood在评论中所说的内容,并给出一些具体的选择。