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

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

我只知道第一栏怎么做。

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

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

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

【问题讨论】:

    标签: jquery jquery-selectors selector


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-11
      • 2013-07-17
      • 1970-01-01
      • 2012-08-18
      • 1970-01-01
      相关资源
      最近更新 更多