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

CSS/JS选择器-选择类不等于的最后一个元素

  •  1
  • Piet  · 技术社区  · 7 年前

    我正在尝试从HTML表中获取 latest td公司 标签来自 最近的 tr公司 最新td标签应 not 上课 残废 .

    我使用CSS选择器(请不要jQuery!)在纯JavaScript中完成这项工作。我尝试了一些可能性,但都返回null或“无效选择器”消息。还发布了解决方案 here 不适合我。

    我的一些尝试:

    var table = document.getElementById('example');
    var test1 = table.querySelector('tr:last-child > td:nth-last-child(:not(.disabled))');
    var test2 = table.querySelector('tr:last-child > td:nth-last-child:not(.disabled)');
    var test3 = table.querySelector('tr:last-child > td:nth-last-child(1 of :not(.disabled))');
    var test4 = table.querySelector('tr:last-child > td:not(.disabled):last-child');
    

    例如:

    <table id="example">
        <tr>
            <td> ... </td>
            <td class="disabled"> ... </td>
            <td> ... </td>
        </tr>
        <tr>
            <td class="disabled"> ... </td>
            <td> ... </td>
            <td> ... </td>
        </tr>
        <tr>
            <td> ... </td>
            <td> Value I want </td>
            <td class="disabled"> ... </td>
        </tr>
    </table>
    

    在这里我需要值 Value I want ,但我无法得到它。有人知道怎么了吗?

    1 回复  |  直到 7 年前
        1
  •  3
  •   T.J. Crowder    7 年前

    CSS没有“last”伪类,并且 :last-child :last-of-type 不适用于您想要的内容。

    但是,由于您似乎希望使用JavaScript选择元素,所以很简单:全选 td 那没有 .disabled 最后一个:

    var list = document.querySelectorAll("td:not(.disabled)");
    var last = list[list.length - 1];
    

    或适用于该表:

    var list = document.querySelectorAll("#example td:not(.disabled)");
    var last = list[list.length - 1];
    

    例子:

    var list = document.querySelectorAll("#example td:not(.disabled)");
    var last = list[list.length - 1];
    console.log(last.innerHTML);
    <table id="example">
        <tr>
            <td> ... </td>
            <td class="disabled"> ... </td>
            <td> ... </td>
        </tr>
        <tr>
            <td class="disabled"> ... </td>
            <td> ... </td>
            <td> ... </td>
        </tr>
        <tr>
            <td> ... </td>
            <td> Value I want </td>
            <td class="disabled"> ... </td>
        </tr>
    </table>