javascript - 如何使用 Javascript 循环遍历数组并更改和添加额外的 HTML,以输出带有这些值的一些文本?
问题描述
例如,我正在使用一个返回 JSON 值数组的 API,并且我想将它们输出到页面。
这是我正在使用的完整代码,如果有人想尝试一下,看看我可以在哪里工作。
我为单击按钮时要输出的值的布局创建了一些 HTML,如下所示:
<p class="txData">
<p id="txHash">Transaction ID: </p><br>
<p id="txTime">Time: </p><br>
<p id="txToken">Token Symbol: </p><br>
<p id="txTo">To: </p><br>
<p id="txFrom">From: </p><br>
<p id="txValue">Amount Transferred: </p><br>
<p>***********************************</p><br>
</p>
然后,我为要附加到的那些元素分配变量:
let txHash = document.querySelector('#txHash');
let txTime = document.querySelector('#txTime');
let txToken = document.querySelector('#txToken');
let txTo = document.querySelector('#txTo');
let txFrom = document.querySelector('#txFrom');
let txValue = document.querySelector('#txValue');
我通过执行以下操作附加从 API 检索到的值: txHash.insertAdjacentHTML('beforeend', jsonFile.result[0].hash);
txTime.insertAdjacentHTML('beforeend', jsonFile.result[0].timeStamp);
txToken.insertAdjacentText('beforeend', jsonFile.result[0].tokenSymbol)
txTo.insertAdjacentHTML('beforeend', jsonFile.result[0].to);
txFrom.insertAdjacentHTML('beforeend', jsonFile.result[0].from);
txValue.insertAdjacentHTML('beforeend', web3.utils.fromWei(jsonFile.result[0].value, 'ether'));
这可以输出第一个事务所需的值(索引 [0])。
我如何创建一个循环,该循环基本上在开始时使用模板 HTML,然后将其输出到数组中的下 5 个元素,以便它成为以相同格式输出的每个新事务的详细信息,但无需编码5次?
我是 HTML 和 Javascript 的新手,非常感谢任何帮助。谢谢你。
解决方案
第一条建议,如果您还不知道,如果您打算将静态 id 用于显示列表,则应避免在 html 模板中使用静态 id,因为 id 在单个 html 页面中必须是唯一的。
第二个,您应该使用框架来帮助您将数据显示为列表。如果你知道著名的如 Angular 或 React。您也可以按照某人的建议使用 jQuery。
这是一个 VueJS 的小例子,它允许您使用 html 模板定义组件。然后,您可以使用 for 指令在循环中使用它们(请注意,我不是 VueJS 专家,您可能会找到更好的解决方案):
<body>
<div id="app">
<div v-for="json in jsonFile">
<data-display v-bind:json="json"></data-display>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script type="text/javascript">
var DataDisplay = {
props: ['json'],
template: '<div class="txData">\
<p>Transaction ID: {{json.hash}}</p>\
<p id="txTime">Time: {{json.timeStamp}}</p>\
<p id="txToken">Token Symbol: {{json.tokenSymbol}}</p>\
<p id="txTo">To: {{json.to}}</p>\
<p id="txFrom">From: {{json.from}}</p>\
<p id="txValue">Amount Transferred: {{json.value}}</p>\
<p>***********************************</p>\
</div>'
};
var vm = new Vue({
el: "#app",
data: {
jsonFile: [
{
hash: 'hash1',
timeStamp: 'timestamp1',
tokenSymbol: 'token1',
to: 'to1',
from: 'from1',
value: 'value1'
}, {
hash: 'hash2',
timeStamp: 'timestamp2',
tokenSymbol: 'token2',
to: 'to2',
from: 'from2',
value: 'value2'
}
]
},
components: {
'data-display': DataDisplay
}
});
</script>
</body>
用于示例的文档: