首页 > 解决方案 > Jquery - 查找/每个触发两次

问题描述

我有以下代码:

var jqxhr = $.get(url, function(downloadedPage) {
     //alert("success");
})

.done(function(downloadedPage) {
        var newRows = $(downloadedPage).find("table.articles tbody");
        var rowsToAdd = [];

        alert (newRows.html().split("<tr>").length); // gives 733
        $("BODY").after("<code>" + escapeHtml(newRows.html()) + "</code>"); // prints a list of <tr></tr> : 733 lines

        newRows.find("tr").each(function(index) {
            alert(index); // goes up to 1464
            var row = $(this);

            rowsToAdd.push("<tr>" + row.html() + "</tr>");
        });

        alert(rowsToAdd.length); // gives 1464

我不明白为什么这段代码在 rowsToAdd 中插入了两倍的行数......为什么使用 733 行容器,它会“接近”两倍的行数(733 vs 1464)。

如果我替换第一个电话:

$(downloadedPage).find("table.articles tbody");

$(downloadedPage).find("table.articles:first tbody");

那么问题就消失了。

有人可以解释一下那里有什么问题吗?

标签: jqueryfinditerationeach

解决方案


您的选择器选择了更多元素。如果:first解决了您的问题,则意味着在没有它的情况下必须选择更多元素,因此选择是错误的。

由于容器上的差异,您可以添加您的 html 或对其进行修改,以便我们更好地检查它


推荐阅读