Jquery 包含和不包含链接

Posted

技术标签:

【中文标题】Jquery 包含和不包含链接【英文标题】:Jquery Contains and Not Contains Chaining 【发布时间】:2013-01-30 06:21:43 【问题描述】:

图片我有这样的表:

<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”值,方法是选择具有“地址”的 TD,而不是“地址 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

【问题讨论】:

你能把 td 与 id base 类似 吗? 为什么不简单地:not(':contains(Adresse IP)') @Mahmood,我在greasemonkey上使用了这个代码。所以我不能修改 TD。 @dsq,这是我尝试使用的,但与 contains("Adesse") 链接。实际上,我的表中有很多 TD(不仅仅是我的示例中的 3 个)。 【参考方案1】:

也许是这样的:

$("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 在选择器中使用从右到左,所以可以这样想:

    查找所有 td.tdSoap 现在找到那些没有任何 'Adresse\u00a0IP' 的 - 在 td.tdSoap 中没有找到 现在找到那些有 'Adresse' 的 - 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();

注意:如果你有更多的“组”,这些会得到所有这些的文本,不确定你是否想要所有这些,但这就是你所拥有的。

编辑:无论有没有&amp;nbsp,这都适用

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

【讨论】:

仅供参考,我假设您在 ip 名称中确实有 &nbsp - 如果您有一些有,有些没有&amp;nbsp,您将需要返工。我使用 1.9.1 jQuery 和 1.6.4 测试了这些 谢谢马克,这个答案。对我来说更有意义。但仍然不明白为什么它适用于 Goram 示例:jsfiddle.net/GoranMottram/2ycvN 顺便说一句,我试过 $("table tr td:contains('Adresse'):not(':contains(Adresse\u00a0IP)') + td.tdSoap") next() (如果我是对的),它也有效。 $("table tr:has(td:contains('Adresse'): td.tdSoap").text(); 这样做很奇怪,但是放入 .next、.find 等通常比大型组合选择器更快 - 似乎违反直觉,但选择器代码以这种方式工作 - 运行性能测试,尝试尽可能快地限制 dom 遍历。那个小提琴里面没有 &nbsp - 为什么我包括一个额外的过滤了两者。【参考方案2】:

如果您不能修改 html,那么这应该可以解决问题:

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

否则,我建议尝试一下 Mahmood 在 cmets 中所说的内容,并为其提供特定的选择。

【讨论】:

这是我使用的变体之一。它什么也没返回:( 事实上,它正在处理您的测试链接。但我认为 Mark Schultheiss 的答案是正确的。

以上是关于Jquery 包含和不包含链接的主要内容,如果未能解决你的问题,请参考以下文章

如果链接包含特定文本,则jQuery将类添加到href

根据包含数字和不包含数字的行对 CSV 中的行进行排序

javascript 基于jQuery的出站链接跟踪,包含新窗口的案例以及相同的窗口位置

如何查找包含标题的位置

html 此Gist包含带有和不带Schema标记的事件的标记。

从包含在 HTML 标记和不带标记的字符串中的一系列字符串中提取文本