图像我有这样的表:
<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>
我想通过选择TR获得"NYC"值,该TR有一个带"Adresse"的TD,但没有带"Adesse IP"。
我已经用这个代码做了我想做的事:
$("table tr:has(td:contains('Adresse'))").not(":contains(Adresseu00a0IP)").find("td.tdSoap").text();
但是,我尝试了很多这种代码,但从未成功:
$("table tr:has(td:contains('Adresse'):not(':contains(Adresseu00a0IP)')) td.tdSoap").text();
PS:"\u00a"就是因为http://bugs.jquery.com/ticket/3450
也许这是:
$("table tr td:contains('Adresse')").not(':contains(Adresseu00a0IP)').next('.tdSoap').text();
为什么这不起作用:(你有什么)
$("table tr:has(td:contains('Adresse'):not(':contains(Adresseu00a0IP)')) td.tdSoap").text();
jQuery在选择器中使用了从右到左的方式,所以可以这样想:
- 查找所有td.tdSoap
- 现在找到那些没有任何"Adresse\u00a0IP"的-好吧,没有一个在td.tdSoap中做
- 现在找到那些有"Adresse"的——好吧,没有一个在td.tdSoap中有
- 现在,将它们组合在一起-仍然没有在td.tdSoap内部,因此没有选择任何内容
现在,这也可以去掉"has"并添加下一个:
$("table tr td:contains('Adresse'):not(':contains(Adresseu00a0IP)')").next("td.tdSoap").addClass('myfirst');
然而,运行一些性能指标,看看其中哪一个更快:
$('table').find('tr').find('td:contains("Adresse")').not(':contains("Adresseu00a0IP")').next('.tdSoap').text();
$('table').find('.tdSoap').prev(':contains(Adresse)').not(':contains(Adresseu00a0IP)').next().text();
$("table tr td:contains('Adresse'):not(':contains(Adresseu00a0IP)')").next('td.tdSoap').text();
$("table tr:has(td:contains('Adresse'))").not(":contains(Adresseu00a0IP)").find("td.tdSoap").text();
$("table tr td:contains('Adresse')").not(':contains(Adresseu00a0IP)').next('.tdSoap').text();
注意:如果你有更多的"组",这些会得到所有的文本,不确定你想要所有的,但这就是你所拥有的。
编辑:无论是否使用 
$('table').find('tr').find('td:contains("Adresse")').not(':contains("Adresseu00a0IP")').not(':contains("Adresse IP")').next('.tdSoap').text();
如果你不能修改HTML,那么这就可以了:
$('table tr:has(td:contains("Adresse"):not(:contains("Adresse IP"))) td.tdSoap').text()
否则,我建议试试马哈茂德在评论中说的话,并给它一些具体的选择。