如何选择嵌套表中不包含某些元素的标签?

时间:2014-04-15 08:11:50

标签: javascript jquery html

有html代码:

<body>
<table>
    <tr>
        <td>A</td>
        <td>
            <table>
                <tr>
                    <td>B</td>
                    <td>...</td>
                </tr>
            </table>
        </td>
    </tr>
    <tr>
        <td>C</td>
        <td>
            <table>
                <tr>
                    <td>D</td>
                    <td>...</td>
                </tr>
            </table>
        </td>
    </tr>
</table>
<button id="click">click</button>
</body>


我想要的是在上面的html代码中获取文本AC。事实上,我尝试了一些方法。我的想法是选择td标签元素,这些元素没有table的下降标记元素。但是,我只能使用td的descent标记元素获取这些table元素,jquery代码如下。
您可以尝试在jsddle上运行。

$("#click").on("click", function () {
var ss = $("td:has(table)");
$.each(ss, function (index, value) {
        alert(index + $(this).html());
    });
});

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

试试这个:

$("#click").on("click", function () {
    $("td").each(function(index){
        if(($(this).closest('table').parent('td').length == 0) && ($(this).find('table').length == 0))
           alert(index + $(this).html());
    });
});

DEMO

答案 1 :(得分:0)

  

我的想法是选择没有表格的下降标记元素的td标记元素。

然后使用not选择器:

$("#click").on("click", function () {
var ss = $("td:not(:has(table))");
$.each(ss, function (index, value) {
        alert(index + $(this).html());
    });
});

答案 2 :(得分:0)

我还找到了另一个问题的解决方案,对于像我这样的新手来说,这可能更容易理解。虽然html部分没有显示标记tbody,但确实存在。我检查并显示了table的正文。然后选择第一个td中每个tr的第一个table。 javascript代码如下。

$("#click").on("click", function () {
  $("#message").text($("table").html());
  var trs = $("tbody:first > tr");
  $.each(trs, function (index, value) {
    var td = $(this).find("td:first");
    alert(td.text());
  });
});