我试图删除表中的所有行,除了匹配的行:
此代码删除了我实际想要保留的行 -
$("table#traffic").each(function() {
$("td:contains('" + selected_text + "')").parent().remove();
});
我基本上想要做与上述相反的事情。
答案 0 :(得分:1)
尝试$("td:not(contains('" + selected_text + "'))").parent().remove();
答案 1 :(得分:1)
乍一看,我很困惑 - 你在(“桌子#traffic”)的每场比赛中都在做一个.each()函数,但是你没有在你的.each中的任何地方集成$(this) ()函数告诉我你可以一起消除.each()循环。
关于你的问题,:not selector是否适用于:contains?
$("td:not(:contains('" + selected_text + "'))").parent().remove();
答案 2 :(得分:1)
remove函数也可以将表达式作为选项。
$("table#traffic tr").remove(":not(:contains('" + selected_text + "')"));
有趣的是,以下配置文件稍微快一点,行数相当多。我认为parent()调用会耗费更多时间。
$("table#traffic td:not(:contains('" + selected_text + "'))").parent().remove();
所以,我猜你可以选择任何你更好的可读性。
答案 3 :(得分:0)
你可以使用.not函数。 http://docs.jquery.com/Traversing/not#expr
答案 4 :(得分:0)
我很失望上面的解决方案并不特定于他的特定表,实际上是检查任何和所有表行。这可能不是预期的效果。
$("table#traffic td:not(:contains('" + selected_text + "'))").parent().remove();
答案 5 :(得分:0)
我很惊讶没有人提到filter方法......来自文档:
filter(expr)
从中删除所有元素 与之匹配的匹配元素 指定的表达式。这种方法 用于缩小结果的范围 搜索...
那么,也许是这样的?
$("table#traffic tr")
.filter(':has(td:contains('" + selected_text + "'))')
.remove();
当然,您仍然可以使用not
的组合来实现相同的选择(还有许多其他方法可以为这只猫设置皮肤)。我只是想提到filter
函数,因为它就是它的用途。
最后,我还要指出到目前为止所回答的方法都没有解决最终可能会删除您不想要的行的情况!例如,如果一行有多个单元格,那么您不希望行中不包含文本的那些单元格的一个导致整行被删除!请注意,在上面的解决方案中,过滤是在行级而不是单元级完成的。 (我没有对此进行测试,所以如果不能正常工作,请不要跳我!)
祝你好运!