繁体   English   中英

如何使用 Javascript 循环遍历数组并更改和添加额外的 HTML,以输出带有这些值的一些文本?

[英]How Can I use Javascript to loop through an array and change and add extra HTML that outputs some text with those values?

例如,我正在使用一个返回 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>

用于示例的文档:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM