0

如果我获取 HTML 文档的所有元素并将它们存储在一个数组中。现在假设我使用 jquery remove() 方法删除了一些元素。我知道它也会删除它的子孩子。现在我想遍历列表并想知道哪些子元素也被删除了。看看这段代码: -

$(document).ready(function() {
        var list = $('*');
        for (var i=0; i<list.length; i++) {
            console.log(i + " " + list[i].tagName);
        }
        $("table").remove();
        for (var i=0; i<list.length; i++) {
            if ($(list[i]).parent().length == 0) console.log(list[i].tagName + "does not exist in dom now");
            else console.log(i + " " + list[i].tagName + " " + $(list[i]).parent().get(0).tagName);
        }
    });

HTML 部分是:-

<div>
    <table>
        <tr>
            <td> Hi this is Sachin </td>
            <td> Hi this is Rahul </td>
        </tr>
    </table>
</div>

我收到的输出是:_

0 HTML parent.html:9
1 HEAD parent.html:9
2 SCRIPT parent.html:9
3 SCRIPT parent.html:9
4 BODY parent.html:9
5 DIV parent.html:9
6 TABLE parent.html:9
7 TBODY parent.html:9
8 TR parent.html:9
9 TD parent.html:9
10 TD parent.html:9
0 HTML undefined parent.html:14
1 HEAD HTML parent.html:14
2 SCRIPT HEAD parent.html:14
3 SCRIPT HEAD parent.html:14
4 BODY HTML parent.html:14
5 DIV BODY parent.html:14
TABLEdoes not exist in dom now parent.html:13
7 TBODY TABLE parent.html:14
8 TR TBODY parent.html:14
9 TD TR parent.html:14
10 TD TR 

我不明白为什么 td 和 tr 显示他们的父母。它们也将被视为已删除。现在有没有其他方法可以找出我列表中已删除的项目。提前致谢

4

1 回答 1

3

问题是您检查元素是否有父元素:

if ($(list[i]).parent().length == 0)

仅仅因为您从 DOM 中删除了一个元素并不意味着它的后代已从该元素中删除。它们已从DOM 中删除(因为它们的父级已删除),但它们仍然拥有该父级。

您可以closest用来检查元素是否有body祖先:

if ($(list[i]).closest("body").length == 0)

由于元素不再在 DOM 中,它们不应该有body祖先。


作为旁注,由于0评估为false,您可以稍微简化您的条件:

if (!$(list[i]).closest("body").length)
于 2012-06-07T07:01:35.900 回答