jQuery AND 选择器

Posted

技术标签:

【中文标题】jQuery AND 选择器【英文标题】:jQuery AND selector 【发布时间】:2011-09-27 19:23:41 【问题描述】:

我的页面上有一个 datagrid(asp.net)。我想选择第一列中包含单词“foo”和第二列中包含单词“bar”的所有行。

我只知道第一栏怎么做。

jQuery('[id$="datagrid1"] tr td:contains(foo)')

谁能告诉我如何为第二列包含“bar”一词的条件?

编辑: 另外,我如何准确匹配这个词?当单元格包含单词时,选择器contains 匹配。

【问题讨论】:

【参考方案1】:

选择器只能让你到目前为止。使用.filter() 以获得最大的灵活性:

jQuery('[id$="datagrid1"] tr').filter(function () 
    return $('td:eq(0)', this).text() == 'foo' &&
        $('td:eq(1)', this).text() == 'bar';
);
.filter() 函数遍历每个元素,并希望您返回 truefalse 以指示是否应保留该元素(匹配)。 :eq() 选择器允许您在匹配集中选择一个索引。

【讨论】:

我尝试了 jerluc 的建议,这段代码似乎有效:jQuery('[id$="datagrid1"] tr td:contains(foo)+td:contains(bar)') @StarCub,但正如你所提到的,它不会完全匹配这个词。它也严格不只查看第 1 列和第 2 列 - 如果您有更多列,它也会尝试匹配第 2 列和第 3 列,等等。【参考方案2】:

像这样:

jQuery('[id$="datagrid1"] tr').filter(function()
   var $tds = $(this).find("td");
   return ($tds.eq(0).text()=="foo" && $tds.eq(1).text()=="bar");
);

相同的代码更“解释”

$trs = jQuery('[id$="datagrid1"] tr').filter(function()
   var $first_td = $(this).find("td").eq(0);  //First column
   var $second_td = $(this).find("td").eq(1); //Second column
   return ($first_td.text()=="foo" && $second_td.text()=="bar"); //Condition to filter
);

这会返回一组匹配您想要的条件的<tr>

希望这会有所帮助。干杯

【讨论】:

感谢您的回答。我只能选择一个答案,@Box9 先回答。【参考方案3】:

假设第二列<td>与第一列<td>相邻,您可以使用next-sibling selector

【讨论】:

以上是关于jQuery AND 选择器的主要内容,如果未能解决你的问题,请参考以下文章

jquery标签选择器怎么循环

[ jquery 选择器 总览 ] jquery选择器总览

jquery选择器都有哪些

jQuery选择器

jQuery选择器概述

jQuery ---[jQuery选择器,jQuery对象的遍历]