Jquery selectors 选择TD文本包含foo的任何TR

Jquery selectors 选择TD文本包含foo的任何TR,jquery-selectors,Jquery Selectors,我很确定这不需要进入函数就可以完成,但我想抓住任何有邮件的TR。。。或是福。。。作为例子 我一直在想应该是这样的 $'tr[./text^=foo]'但chrome不喜欢它。 或者$'tr[/td/text^=Mail]'但是运气不好 这可以用一个简单的选择器来完成吗?一个可能的解决方案: $('td').filter(function() { return $(this).text().indexOf('Foo') === 0; }).closest('tr'); 您必须使用来处理元

我很确定这不需要进入函数就可以完成,但我想抓住任何有邮件的TR。。。或是福。。。作为例子

我一直在想应该是这样的

$'tr[./text^=foo]'但chrome不喜欢它。 或者$'tr[/td/text^=Mail]'但是运气不好 这可以用一个简单的选择器来完成吗?

一个可能的解决方案:

$('td').filter(function() {
    return $(this).text().indexOf('Foo') === 0;
}).closest('tr');
您必须使用来处理元素的文本—您不能使用选择器来执行此操作,至少不是您想要的方式,并且应该是自我解释的方式

编辑:但这可能会多次选择一个元素。我实际上不知道jQuery如何处理这个问题。另一个解决方案是在tr和td上使用两个嵌套过滤器,但不知何故,这感觉效率低下

Edit2:从1.4.4版开始,jQuery似乎足够聪明,可以处理同一元素的多次出现,即它像一个集合一样工作。如果更改为1.4.2版,您将看到第一行被选中两次。

其中包含:

TD:ContainesMail


但这只是在元素中的任何位置查找邮件,没有“以开头”。

我很惊讶没有人想到这一点,也许我的问题太模糊了

$('tr:has(td:contains("Leather"))').hide()
$('tr:has(td:contains("Mail"))').hide()
$('tr:has(td:contains("Cloth"))').hide()
$('tr:has(td:contains("Bow"))').hide()
$('tr:has(td:contains("Gun"))').hide()

要使其成为搜索dk或pally装甲和武器的书签,选择器或多或少必须是有效的CSS选择器。但它们不是XPath!你不能用一个简单的选择器来实现这一点,但可能是用filter.com。看起来wowhead.com这个页面已经在使用jQuery v1.4.2了,所以我必须以某种方式处理重复。我是不是开始过早优化了?优化字符串搜索可能不值得在可读性损失方面进行权衡。基于我的使用范围很小,这可能是一个非常合适的选择。我想知道如何实现更大规模或更可扩展的选项,如果有的话。将尝试此选项。$'td:containsMail::祖先/[td]'。隐藏语法问题,但非常接近是一个开始,但它仅适用于属性。。。文本是否能够以某种方式被视为属性?正如答案中所述,:包含对元素任何部分中文本的搜索,而您专门要求使用start with。此外,您可以使用逗号将选择器串在一起,这样您就不必使用5$和hidesneat,我是从:has和总体解决方案答案中说的,而不仅仅是解决方案的一部分。不,您的问题太具体了。请仔细查看,易江所说的选项:@Maslow:你问题的标题是选择TD文本以foo开头的任何TR。事实上,用一个简单的选择器是做不到这一点的。因为你有关于文本的唯一信息,是的,你可以看看你正在寻找的单词是否也包含在其他单元格中。。。。无论如何,至少你有你的解决方案。