javascript - 使用 $.each 函数缩短 js 脚本

标签 javascript jquery each

我有以下 .js 代码,它读取 json 文件以每分钟更新 html 中的值。

$(document).ready(updateData);
function updateData() {
    $.ajaxSetup({ cache: false });
    $.getJSON("data/data.json", function(result){
        $('#id1').empty();
        $('#id1').append(result.id1);
        $('#id2').empty();
        $('#id2').append(result.id2);
        $('#id3').empty();
        $('#id3').append(result.id3);
        $('#id4').empty();
        $('#id4').append(result.id4);
        $('#id5').empty();
        $('#id5').append(result.id5);
        $('#id6').empty();
        $('#id6').append(result.id6);
        $('#id7').empty();
        $('#id7').append(result.id7);
        $('#id8').empty();
        $('#id8').append(result.id8);
        $('#id9').empty();
        $('#id9').append(result.id9);
    });
    setTimeout(updateData, 60000);
}

可以使用 $.each() 函数以更短的方式重写吗?

最佳答案

可以使用简单的 for 循环对其进行改进:

$.ajaxSetup({ cache: false }); // 1
$(document).ready(updateData);

function updateData() {
  $.getJSON("data/data.json", function(result) {
    for (var i = 1; i<= 9; i++) {
      $('#id' + i).empty().append(result['id' + i]); // 2
    }

    setTimeout(updateData, 60000); // 3
  });
}

但是,通过串联 ID 访问 DOM 看起来不太好。
例如,您可以尝试使用 CSS 类和 data-attributes 来实现它。

一些小的改进:

  1. ajaxSetup只能初始化一次,不需要每次都调用它。
  2. 您可能不需要同时使用empty()append()。如果是文本,则只需使用 .text().html()(对于 HTML)即可。
  3. 最好在 getJSON 回调中调用 setTimeout,以便在上一个请求完成后 60 秒内更新数据,在 .always() 处理程序中更好。想象一下,您的一个客户端的连接速度非常慢,加载此 JSON 需要 60 秒以上。这会带来意想不到的结果。

关于javascript - 使用 $.each 函数缩短 js 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40668676/

相关文章:

jQuery 检查表单输入是否为空(除了一个)

javascript - 如何组合两个动态创建的数组的所有元素并将结果写入 HTML?

javascript - Konva addEventListener 单击多个图像

jquery - slideToggle 菜单隐藏

javascript - Jquery 自动完成选择 TypeError : ui. 项未定义

javascript - .each() 中的 jQuery .find() 不工作

javascript - 如何在正则表达式验证(javascript)中创建可选字段?

javascript - 如何防止停鱼随机逆转且多鱼发生

javascript - 是否可以阻止 jqGrid 行被选择和/或突出显示?

jquery - 动画完成后删除类