在jQuery中追加/删除的最有效方法

时间:2011-01-27 09:30:11

标签: jquery performance append

这个想法是创建一个进度条但是有句号“。”。所以在div中,“。”每隔500毫秒附加一次,我想要做的是,如果div的长度(即“。”的数量)大于3,则开始删除一个“。”一次,然后在0时,再次启动该过程:

            setInterval(function() {
                  $("#load").append(".");
                  var length;
                  $('#load').each(function(){  
                    length = $("#load").val().length;
                  });
                  if (length > 3){
                    $("#load").remove(".");
                  }
            }, 500);

2 个答案:

答案 0 :(得分:3)

我不认为效率在这里是个问题。

但有几件事需要解决:

  1. .val()仅适用于表单输入 - 对于您想要的div .text()
  2. 我认为只有一个ID为'load'的div。如果还有更多,则应使用类而不是ID,如果不是,则不需要.each()
  3. 最后,我会这样做:

    var count = 0, dots = '...';
    setInterval(function () {
        var len = Math.abs(count++ % 6 - 3); // Gives only 3, 2, 1, 0, 1, 2, 3, ...
        $('#load').text(dots.substring(0, 3 - len));
    }, 500);
    

    在此处查看演示:http://jsfiddle.net/Xp77Q/3/

答案 1 :(得分:0)

您执行此操作的方式效率非常低,因为它会在每次更改时触及多个DOM节点。 将当前进度值保存在变量中并使用single更新它会更有效     $('#load').html(...)致电。