javascript - for 循环中元素的批量分配

标签 javascript jquery html for-loop switch-statement

我正在处理从 API 中提取信息的问题,并希望获取该数据并将其插入到 for 循环 中不同类的某些元素中。现在,我通过包裹在 .each() 方法中的 switch-statement 来完成此操作。似乎这种方式对于一个人来说是重复的,并且可能比任何方式都更注重性能。有没有一种更简洁高效的方式来实现这一点?

var tracks = [{number: "01", title: "Track 1", duration: "5:35"}, {number: "02", title: "Track 2", duration: "5:15"}, {number: "03", title: "Track 3", duration: "5:07"}, {number: "04", title: "Track 4", duration: "0:16"}, {number: "05", title: "Track 5", duration: "5:35"}];

for (var i = 0, trackNumber, trackTitle, trackDuration; i < tracks.length; i++) {
  trackNumber   = tracks[i]["number"];
  trackTitle    = tracks[i]["title"];
  trackDuration = tracks[i]["duration"];
  
  $("span").each(function() {
    switch($(this).attr("class")) {
      case "number":
        $(".number").eq(i).text(trackNumber);
      case "title":
        $(".title").eq(i).text(trackTitle);
      case "duration":
        $(".duration").eq(i).text(trackDuration);
      default:
        //
    }
  });
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <thead>
    <tr>
      <td><b>No</b></td>
      <td><b>Title</b></td>
      <td><b>Duration</b></td>
    </tr>
  </thead>
  <tr>
    <td><span class="number"></span></td>
    <td><span class="title"></span></td>
    <td><span class="duration"></span></td>
  </tr>
  <tr>
    <td><span class="number"></span></td>
    <td><span class="title"></span></td>
    <td><span class="duration"></span></td>
  </tr>
  <tr>
    <td><span class="number"></span></td>
    <td><span class="title"></span></td>
    <td><span class="duration"></span></td>
  </tr>
  <tr>
    <td><span class="number"></span></td>
    <td><span class="title"></span></td>
    <td><span class="duration"></span></td>
  </tr>
  <tr>
    <td><span class="number"></span></td>
    <td><span class="title"></span></td>
    <td><span class="duration"></span></td>
  </tr>
</table>

最佳答案

你可以编码:

$('tbody td span').text(function() {
    var i = this.parentNode.parentNode.rowIndex - 1;
    return tracks[i][this.className];
});

在上面的片段中 rowIndextr elements 用于按索引获取特定数组的元素。使用括号表示法 ( [index] ) 和 classNamespan元素相应属性的值由 text 设置方法。 Here is a demo.

因为表格在 thead 中有一个 1 行元素rowIndex第一个 tr tbody 的 child 元素是 1 .这就是返回值减 1 的原因。

请注意,您应该考虑生成 tr根据返回的数据元素。使用模板库是一种选择。

编辑:你也可以使用 vanilla JavaScript:

var spans = document.querySelectorAll('tbody td span');
Array.prototype.forEach.call(spans, function (el) {
    var i = el.parentNode.parentNode.rowIndex - 1;
    el.textContent = tracks[i][el.className];
});

关于javascript - for 循环中元素的批量分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29628285/

相关文章:

IE6 中输入框的 jquery change() - 无法删除焦点

jquery Draggable - 遏制

php - 网络浏览器中的网络浏览器

javascript - 如何在 CoffeeScript 中编写这个简单的 javascript 代码?

javascript - 是否可以从 jquery 监听自定义原型(prototype)事件?

html - 表格标题不以 100% 宽度显示列

html - 用于在另一个节点之后获取节点的 XPath 语法?

javascript - 获取json,图片url

javascript - 如何使用 "this"和 fetch ?

javascript - 使用 Jquery 选择自动聚焦下拉菜单