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 个)。
也许是这样的:
$("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();
注意:如果你有更多的“组”,这些会得到所有这些的文本,不确定你是否想要所有这些,但这就是你所拥有的。
编辑:无论有没有&nbsp
,这都适用
$('table').find('tr').find('td:contains("Adresse")').not(':contains("Adresse\u00a0IP")').not(':contains("Adresse IP")').next('.tdSoap').text();
【讨论】:
仅供参考,我假设您在 ip 名称中确实有   - 如果您有一些有,有些没有&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 遍历。那个小提琴里面没有   - 为什么我包括一个额外的过滤了两者。【参考方案2】:
如果您不能修改 html,那么这应该可以解决问题:
$('table tr:has(td:contains("Adresse"):not(:contains("Adresse IP"))) td.tdSoap').text()
否则,我建议尝试一下 Mahmood 在 cmets 中所说的内容,并为其提供特定的选择。
【讨论】:
这是我使用的变体之一。它什么也没返回:( 事实上,它正在处理您的测试链接。但我认为 Mark Schultheiss 的答案是正确的。以上是关于Jquery 包含和不包含链接的主要内容,如果未能解决你的问题,请参考以下文章
javascript 基于jQuery的出站链接跟踪,包含新窗口的案例以及相同的窗口位置