1

目前,当我从搜索中收到结果时,我会遍历结果并将其附加到列表中(我猜这会导致浏览器在每次添加项目时重新呈现页面 - 有没有办法确认这一点?)。

$.each(results, function(key, val){
    $(".results").append("<div>"+ val +"</div>");
});

在第二个浏览器的这一部分中有点滞后(有动画和东西......)。创建单独的 div.results 并在 javascript 中添加项目然后在 dom 中替换它会更有效吗?最有效的方法是什么?这些事情通常是怎么做的?

4

2 回答 2

1

我要做的是在那里使用document.createDocumentFragment()并执行所有可能的操作,并触摸一次真正的 DOM。(在循环中缓存一次选择器可能是个好主意):

var frag = document.createDocumentFragment();
$.each(results, function(key, val){
    var a = document.createElement("div");
    a.innerHTML = val;
    frag.appendChild(a);
});
$(".results").append(frag);
于 2013-07-13T17:11:34.867 回答
1

您在循环的每次迭代中都重新查询 DOM。如果您认为.results循环时元素的数量不会发生变化,则没有理由这样做。

如果您关心性能,您可以减少对 jQuery 的使用。

var frag = document.createDocumentFragment();
$.each(results, function(key, val){
    frag.appendChild(document.createElement("div"))
        .appendChild(document.createTextNode(val))
});

// Since you're using a class, I assume there's more than one `.results` element
$(".results").each(function(i, el) {
     el.appendChild(frag.cloneNode(true));
});
于 2013-07-13T17:12:32.107 回答