如何否定一个上下文环境

7

我想选择元素,但是不希望它们的祖先匹配某个选择器。

举个例子,假设我想匹配所有不是表格后代的 <a> 节点。

我尝试了类似这样的代码:

$("a", ":not(table *)");

但是这会导致我的浏览器崩溃。

这个也会让我的浏览器挂起:

jQuery("a", ":not(table td)");

被查询的页面非常大,有许多非常大的表格。因此,我需要一些性能良好的东西。有什么建议吗?

3个回答

7
其他答案过于复杂化了事情。
$('a').not('table a');

-or-

$('a:not(table a)');
< p >在< code >jQuery函数中的第二个参数是要查找元素的上下文,但选择< code >:not(table)将选择不是表格的< em >每个元素,包括表格的后代。通常情况下,当您有一个特定的文档或元素需要搜索时,您会想使用上下文参数。


谢谢!有趣的是,当不扫描表格时性能会更差,我猜这是因为:not选择器也需要一些时间。 - Aaron

0
$('a').not(function() {
   return $(this).closest('table').length > 0;
});

如果它们始终是<td>标签的直接子元素,则可能会更快。

$('a').not(function() {
   return $(this).parent('td').length > 0;
});

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接