Jquery包含但不包含链接

Jquery包含但不包含链接,jquery,contains,jquery-chaining,Jquery,Contains,Jquery Chaining,图我有一张这样的桌子: <table> <tr> <td>Adresse IP</td> <td class='tdSoap'>10.2.3.4</td> </tr> <tr> <td>Zobi</td> <td class='tdSoap'>blabla</td>

图我有一张这样的桌子:

<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>
但是,我用这种代码做了很多尝试,但都没有成功:

$("table tr:has(td:contains('Adresse'):not(':contains(Adresse\u00a0IP)')) td.tdSoap").text();

PS:“\u00a”就是因为这样

如果你不能修改HTML,那么这应该可以做到:

$('table tr:has(td:contains(“adrese”):not(:contains(“adrese IP”))td.tdSoap')。text()
否则,我建议尝试Mahmood在评论中所说的内容,并给它一些特定的选项。

也许是这样的:

$("table tr td:contains('Adresse')").not(':contains(Adresse\u00a0IP)').next('.tdSoap').text();
为什么这不起作用:(你拥有的)

jQuery在选择器中使用从右到左的顺序,因此可以这样认为:

  • 查找所有td.tdSoap
  • 现在找到那些没有任何“ADRESE\u00a0IP”的,在td.tdSoap中没有
  • 现在,找到那些有“ADRESE”的——在td.tdSoap中没有
  • 现在,将它们组合在一起-在td.tdSoap中仍然没有,因此没有选择任何内容
  • 现在,这也可以去掉“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();
    

    你能把td和id放在一起吗?为什么不简单地
    :not(':contains(adrese IP)
    ?@Mahmood,我在greasemonkey上使用了这个代码。所以我不能修改TDs。@dsq,这是我试图使用的,但与contains(“Adesse”)链接在一起。实际上,我的表中有很多TDs(不像我的例子中那样只有3个)。这是我使用的变体之一。这是什么也不返回:(事实上,它正在你的测试链接上工作。但我认为Mark Schultheiss有正确的答案。仅供参考,我假设你在ip名称方面确实有-如果你有一些有,一些没有
    ,你将需要返工。我使用1.9.1 jQuery和1.6.4Thx Mark对此答案进行了测试。对我来说更有意义。但是仍然不明白它为什么在Goram上工作示例:顺便说一句,我尝试了$(“表tr-td:contains('adrese'):not(':contains(adrese\u00a0IP))+td.tdSoap),这与next()相同(如果我是对的话),而且它也工作。$(“表tr:has(td:contains('adrese'):td.tdSoap”)。text();这样做很奇怪,但放入.next、.find等通常比大型组合选择器更快-似乎有点违反直觉,但选择器代码就是这样工作的-运行性能测试,尽量限制dom遍历的速度。这把小提琴中没有这个功能-为什么我在其中加入了一个额外的过滤器,将两者都过滤掉。
    
    $('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();