【问题标题】:How do I filter my javascript constant that I displayed as a table?如何过滤显示为表格的 javascript 常量?
【发布时间】:2019-06-26 23:26:30
【问题描述】:

我有以下将显示为表格的代码。我想通过我的<select id="ano">按年过滤这些内容。

所有这些常量都是表行<tr>

当我选择<option> 2018 时,我只想将那些在“数据”变量中包含数字“2018”的常量显示为<tr>

P.S:我不想“隐藏”不是“2018”的东西。我只想“展示”什么是“2018”。

<!DOCTYPE html>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<html>
<head>
</head>

<body >
    <section id="container">


        <div id="select_calendario">
            <div>
                <select id="ano">
                    <option value="2018">2018</option>
                    <option value="2019">2019</option>
                </select>
            </div>  
        </div>

        <div id="div_calendario_jogos">
            <table id="table_calendario_jogos">
                <tbody>
                    <tr id="table_header">
                        <th>Data</th>
                        <th>Hora</th>
                        <th>Oponente</th>
                        <th>Placar</th>
                        <th>Torneio</th>
                    </tr>
                </tbody>

                <tbody id="tbody_calendario_jogos">         


                </tbody>
            </table>
        </div>
    </section>  

    <script>    
            LSB_2018_JOGO_1: {
                    Data: "11/03/2019",
                    Hora: "15:00",
                    Oponente: "BMC",
                    Placar: "V, 52-42",
                    Torneio: "LSB",
                },

            LSB_2018_JOGO_2: {
                    Data: "08/04/2018",
                    Hora: "12:30",
                    Oponente: "Drink Team",
                    Placar: "D, 59-61",
                    Torneio: "LSB",
                },

            LSB_2018_JOGO_3: {
                            Data: "22/04/2019",
                            Hora: "10:30",
                            Oponente: "Nitcheroy Ballers",
                            Placar: "V, 53-40",
                            Torneio: "LSB",
                        },

            TUC_2018_JOGO_1: {
                            Data: "11/08/2018",
                            Hora: "12:30",
                            Oponente: "Unirio",
                            Placar: "D, 30-60",
                            Torneio: "TUC",
                        },

            TUC_2018_JOGO_2: {
                            Data: "15/09/2019",
                            Hora: "17:10",
                            Oponente: "UFRJ Aecs",
                            Placar: "V, 29-25",
                            Torneio: "TUC",
                        },

            TUC_2018_JOGO_3: {
                            Data: "20/10/2018",
                            Hora: "16:00",
                            Oponente: "UERJ Economia",
                            Placar: "V, 49-30",
                            Torneio: "TUC",
                        }

};


const tbody = document.getElementById('tbody_calendario_jogos');

for (const key in jogos2018) {
  const tr = document.createElement('tr');

  for (const item in jogos2018[key]) {

    const td = document.createElement('td');
      td.textContent = jogos2018[key][item];

      tr.appendChild(td);
  }

  tbody.appendChild(tr);
}
    </script>
</body>
</html>     

【问题讨论】:

  • 你想用你的LSB_2018_JOGO_#...s 做什么?您需要 = 分配给变量,而不是 :
  • 另外你的脚本只运行一次,你需要在事件监听器中运行代码,比如click

标签: javascript html arrays filter


【解决方案1】:

我不知道你想显示的值,所以我只显示了日期:

编辑:只需为要在支票中显示的每个属性添加更多 &lt;td&gt; 元素

document.getElementById("ano").addEventListener("change", function(e) {
    const tbody = document.getElementById('tbody_calendario_jogos')
    while (tbody.firstChild) {
        console.log(tbody.firstChild)
        tbody.removeChild(tbody.firstChild)
    }
    for (key in data) {
        const re = new RegExp(`${e.target.value}`)
        const isVal = re.exec(data[key].Data)
        if (isVal != null) {
            const obj = data[key]
            const tr = document.createElement('tr')

            const tdData = document.createElement('td')
            tdData.textContent = obj.Data

            const tdHora = document.createElement('td')
            tdHora.textContent = obj.Hora

            const tdOponente = document.createElement('td')
            tdOponente.textContent = obj.Oponente

            const tdPlacar = document.createElement('td')
            tdPlacar.textContent = obj.Placar

            const tdTorneio = document.createElement('td')
            tdTorneio.textContent = obj.Torneio

            tr.appendChild(tdData)
            tr.appendChild(tdHora)
            tr.appendChild(tdOponente)
            tr.appendChild(tdPlacar)
            tr.appendChild(tdTorneio)
            tbody.appendChild(tr)
        }
    }
})

编辑 2: 如果您想要一种更简洁的方式来执行此操作(注意:此方法中属性的顺序很重要 [aka top 先渲染,bottom 最后渲染])替换内容if (isVal != null) { ... } 与:

const obj = data[key]
const tr = document.createElement('tr')

for (value of Object.values(obj)) {
    const td = document.createElement('td')
    td.textContent = value

    tr.appendChild(td)
    console.log(value)
}

tbody.appendChild(tr)

这会在每次select 的值发生变化时激活(也就是每当用户选择一个选项时),删除"tbody_calendario_jogos" 的所有元素,使用正则表达式按年份过滤正确的对象并显示它们。

PS:我将您的数据整理到此中以使代码正常工作:

const data = {
    LSB_2018_JOGO_1: {
        Data: "11/03/2019",
        Hora: "15:00",
        Oponente: "BMC",
        Placar: "V, 52-42",
        Torneio: "LSB",
    },
    LSB_2018_JOGO_2: {
        Data: "08/04/2018",
        Hora: "12:30",
        Oponente: "Drink Team",
        Placar: "D, 59-61",
        Torneio: "LSB",
    },
    LSB_2018_JOGO_3: {
        Data: "22/04/2019",
        Hora: "10:30",
        Oponente: "Nitcheroy Ballers",
        Placar: "V, 53-40",
        Torneio: "LSB",
    },
    TUC_2018_JOGO_1: {
        Data: "11/08/2018",
        Hora: "12:30",
        Oponente: "Unirio",
        Placar: "D, 30-60",
        Torneio: "TUC",
    },
    TUC_2018_JOGO_2: {
        Data: "15/09/2019",
        Hora: "17:10",
        Oponente: "UFRJ Aecs",
        Placar: "V, 29-25",
        Torneio: "TUC",
    },
    TUC_2018_JOGO_3: {
        Data: "20/10/2018",
        Hora: "16:00",
        Oponente: "UERJ Economia",
        Placar: "V, 49-30",
        Torneio: "TUC",
    }
};

【讨论】:

  • 这太棒了!!谢谢!!如果我想显示所有其他值怎么办??
  • 很高兴能提供帮助,我将编辑我的答案,但实际上只是将我的 &lt;td&gt; 元素添加到创建的 &lt;tr&gt; 中。
猜你喜欢
  • 1970-01-01
  • 2019-07-31
  • 2021-06-16
  • 2012-07-08
  • 2021-08-22
  • 2021-01-13
  • 2014-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多