代码之家  ›  专栏  ›  技术社区  ›  captainduh

jQuery选择器删除满足两个条件的表行

  •  0
  • captainduh  · 技术社区  · 8 年前

    在我的示例中,一个页面上有多个表。我想删除表中满足两个条件的行。第一个条件是行不能是表的第一行(表元素的第一个子元素)。第二个条件是行不能应用任何样式(没有声明样式元素)。我对复杂选择器的符号感到困惑。我正在尝试超越简单的选择器。

    在我的示例中,要使用的表被标记为gvBigTable。我有以下几点:

    $("#gvBigTable table tbody tr.not('style')").remove();
    $("#gvBigTable table tbody tr.not(first-child)".remove();
    

    我想合并这些条件,以便必须满足这两个条件才能删除行。感谢您的帮助。谢谢

    1 回复  |  直到 8 年前
        1
  •  1
  •   Community CDub    7 年前

    你没有使用 :not() 正确地你可以像下面这样做。

    $("table tbody tr:not(':first-child'):not('[style]')").remove();
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <table>
        <tbody>
            <tr>
                <td>111</td>
            </tr>
            <tr>
                <td>222</td>
            </tr>
            <tr style="">
                <td>333</td>
            </tr>
            <tr>
                <td>444</td>
            </tr>
        </tbody>
    </table>

    更新: 根据 David Thomas 纯CSS解决方案如下所示。

    table tbody tr:first-child ~ tr:not([style]) { 
        display: none; 
    }
    <table>
      <tbody>
        <tr>
          <td>111</td>
        </tr>
        <tr>
          <td>222</td>
        </tr>
        <tr style="">
          <td>333</td>
        </tr>
        <tr>
          <td>444</td>
        </tr>
      </tbody>
    </table>

    如果你不想使用 display: none 然后,您可以使用选择器 table tbody tr:first-child ~ tr:not([style])