javascript - 循环数据并使用数据创建 html 元素
问题描述
我正在从 php 脚本中获取 json 数据并尝试在网页上显示数据。我遇到的问题是我想限制 <ul> 中 <li> 标记的数量,如果满足限制,那么我想创建一个新的 <ul> 元素。
JSON:
[{"mDescription":"Red Widget","mReference":"rwid"},{"mDescription":"Blue Widget","mReference":"bwid"},{"mDescription":"Yellow Widget","mReference":"ywid"},{"mDescription":"Orange Widget","mReference":"owid"},{"mDescription":"Green Widget","mReference":"gwid"},{"mDescription":"Black Widget","mReference":"bwid"},{"mDescription":"White Widget","mReference":"wwid"}]
我尝试循环,但得到奇怪的结果,代码:
function getWidgetList() {
let widgetListURL = 'php/list.php';
fetch(widgetListURL)
.then((response) => response.json())
.then((data) => {
let html = '';
html += `<ul class="col-sm-2 list-unstyled"><li><p class="title">Widgets:</p></li>`;
let counter = 0;
let limit = 3;
for (let key in data) {
let widget = data[key];
html += '<li data-desk="' + widget.mReference + '"><a><span class="d-title">' + widget['mDescription'] + '</span></a></li>';
if (++counter > limit) {
html += `</ul><ul class="col-sm-2 list-unstyled">
<li><p class="title">Widgets:</p></li>`;
counter = 0;
}
}
html += `</ul>`;
//byID('widgetList').innerHTML(html);
console.log(html);
})
}
结果:
<ul class="col-sm-2 list-unstyled"><li><p class="title">Widget:</p></li>
<li data-desk="rwid"><a><span class="d-title">Red Widget</span></a></li>
<li data-desk="bwid"><a><span class="d-title">Blue Widget</span></a></li>
<li data-desk="ywid"><a><span class="d-title">Yellow Widget</span></a></li>
<li data-desk="owid"><a><span class="d-title">Orange Widget</span></a></li>
</ul>
<ul class="col-sm-2 list-unstyled"><li><p class="title">Widget:</p></li>
<li data-desk="gwid"><a><span class="d-title">Green Widget</span></a></li>
</ul>
<ul class="col-sm-2 list-unstyled"><li><p class="title">Widget:</p></li>
<li data-desk="bwid"><a><span class="d-title">Black Widget</span></a></li>
</ul>
<ul class="col-sm-2 list-unstyled"><li><p class="title">Widget:</p></li>
<li data-desk="wwid"><a><span class="d-title">White Widget</span></a></li>
</ul>
我正在尝试使用现代 JavaScript 而不是 JQuery 来完成这项任务。任何帮助将不胜感激。
解决方案
最好的方法是使用模运算符:
let liTagLimit = 3;
let index = 0;
let html = '<ul id="first-ul">';
for(let key in data){
//...create li
index++;
if(index % liTagLimit == 0){//<----- HERE IS THE TRICK
html += "</ul><ul>";
}
html += '</ul>';
推荐阅读
- c - 下面的程序有什么问题?
- azure - 如何为具有多个终结点和根的 Azure CDN 配置 DNS
- java - 如何在 Java 中实现 PCA 算法以提取捕获的实时数据包的特征(使用 jpcap 库)?
- javascript - 可以使用 jQuery 在头部添加元标记吗?
- javascript - 有没有办法实现实时消息传递 Web 应用程序(在多个客户端之间向客户端推送消息)?
- joi - 根据需要标记所有对象属性,包括嵌套对象
- spring - spring-data-redis:如何禁用 pubsub 事件
- javascript - 强制 iframe 有一个 ID
- erlang - 拆分时 gen_tcp recv 中的错误参数
- php - 如何使用 PHP、JSON 或 AJAX 对生成的表应用下拉过滤器?