【问题标题】:jquery .each function to check another selector and delete duplicatesjquery .each 函数检查另一个选择器并删除重复项
【发布时间】:2011-09-09 20:24:51
【问题描述】:

我有一个包含名称和计数数据的 jquery 数据表。

                <tr>
                    <th>Name</th>
                    <th class="count">Count</th>
                </tr>
              </thead>
            <tbody>
        </HeaderTemplate>
        <ItemTemplate>
            <tr>               
              <td class= "name"><%# Eval("Name") %></td>
              <td class= "count"><%# Eval("count") %></td>             
            </tr>

我面临的问题是尝试根据 2 个选择器 检索符合特定条件的数据。例如,我将如何编写一个 jquery 函数来检索名称为“john”且计数为 4 的名称?我能够检索所有名称为 john 的位置,如下所示:

 $('td').each(function () {        
         var aPos = oTable.fnGetPosition(this);
         var aData = oTable.fnGetData(aPos[0]);
         var retrievedEntry = aData[aPos[1]];

         if (retrievedEntry == "john") {
             alert($(this).html() + "found at position " + aPos);
         }
 });

我尝试将alert($(this).find(".count").filter(":contains("1")")); 作为测试,但不断得到空值。

此外,一旦检索到数据,我将如何删除所有重复项并只留下一条记录?非常感谢您的帮助。

【问题讨论】:

    标签: javascript jquery datatables


    【解决方案1】:

    您可以获取包含“john”的单元格,然后过滤该结果以仅包含下一个元素中包含“4”的单元格:

    $('td.name:contains(john)').filter(function(){ return $(this).next().text() == '4'; })
    

    注意::contains 选择器会进行部分匹配,因此它也会匹配例如“johnny”。如果这是一个问题,您也可以将该检查放入过滤器中:

    $('td.name').filter(function(){ return $(this).text() == 'john' && $(this).next().text() == '4'; })
    

    【讨论】:

    • 关于如何立即删除重复项的任何建议?
    • 您将过滤掉第一个项目,获取每个项目的表格行,然后删除它们:.slice(1).closest('tr').remove()
    【解决方案2】:

    1) 您在选择器的内部和外部使用 双引号。考虑:':contains("1")'

    2) 您需要一一指定选择器不带空格

    '.count:contains("1")'
    

    【讨论】:

    • 似乎没有什么不同,但 Guffa 的解决方案似乎可以解决问题。不过谢谢
    猜你喜欢
    • 1970-01-01
    • 2018-08-16
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    相关资源
    最近更新 更多