javascript - 如果 id 对应则显示元素

标签 javascript html

所以,我有以下情况。 如下图所示,我左边有一个表,每一行都与另一个整个表相关联。在右侧,我仅尝试显示与单击的行相关的表格。 asdasdasdasd

我用我现在得到的 ultil 做了一个 codepen (用普通的 javascript),但没有 woking,我不认为这是最好的解决方案。

Javascript:

function funcao(idd){
  let id = parseInt(idd)
  let filhas = document.getElementById("info").
                querySelectorAll(".filha")

  for(var i = 0; i < filhas.length; i++){
    if(i === id){
      console.log("block");
      filhas[id].style.display = "block";
    }
    else{
      console.log("none");
      filhas[id].style.display = "none";
    }
  }

}

HTML:

<div id="root">
  <table>
    <tr>
      <th>Nome</th>
      <th>Numero</th>
    </tr>
    <tr onclick="funcao(0)">
      <td>wally</td>
      <td>123</td>
    </tr>
    <tr onclick="funcao(1)">  
      <td>nada</td>
      <td>321</td>
    </tr>
  </table>

  <div id='info'>
    <table  class='filha' id='0' style='width: 100%;'>
    <tr>
      <th>Idade</th>
      <th>CPF</th>
    </tr>
    <tr>
      <td>2</td>
      <td>45644654</td>
    </tr>
    <tr>
      <td>10</td>
      <td>121321321</td>
    </tr>
  </table>

    <table class='filha' id='1' style='width: 100%;'>
    <tr>
      <th>Idade</th>
      <th>CPF</th>
    </tr>
    <tr>
      <td>25</td>
      <td>45644654</td>
    </tr>
    <tr>
      <td>10</td>
      <td>121321321</td>
    </tr>
  </table>    
  </div>
</div>

最佳答案

你的推理没问题,只是 funcao 函数中有一个错误:你应该更改 filhas[i] 的样式,而不是 filhas[id ]。即:

function funcao(idd){
  let id = parseInt(idd)
  let filhas = document.getElementById("info").
                querySelectorAll(".filha")

  for(var i = 0; i < filhas.length; i++){
    if(i === id){
      console.log("block");
      filhas[i].style.display = "block";
    }
    else{
      console.log("none");
      filhas[i].style.display = "none";
    }
  }

}

我在你的codepen上测试过,它似乎有效。


为了避免循环,可以使用Array接口(interface);我强烈建议熟悉它。
在这种情况下,需要额外小心,因为 querySelectorAll 方法不返回 Array,而是返回 NodeList,这是一种不同但相似的对象。比照。 https://gomakethings.com/converting-a-nodelist-to-an-array-with-vanilla-javascript/ .
幸运的是,Array.from 方法可以轻松地从 NodeList 中获取 Array。

我们有:

function funcao(idd) {
    let id = parseInt(idd)
    let filhas = document.getElementById("info").
        querySelectorAll(".filha")
    const filhaAtual = Array.from(filhas).find(filha => filha.style.display === "block")
    if (filhaAtual) filhaAtual.style.display = "none"
    filhas[id].style.display = "block";
}

Array 中的 find 方法允许获取满足条件的第一个元素。如果没有元素满足条件,则返回undefined
因此,新版本使用 find 获取先前显示的行,如果确实存在显示的行,则将其隐藏,最后显示 id 索引的行。

希望它有帮助 - 卡洛斯

关于javascript - 如果 id 对应则显示元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55084074/

相关文章:

javascript - GraphQL 嵌套查询定义

javascript - 尝试更新 JS 文件中的进度条

javascript - jquery div onclick调用函数

html - 导航文章和旁边的宽度总和为 100%,但旁边转到新行

html - 锚定 CSS 重复背景图片

html - 使 CSS 导航栏覆盖顶部

php - 如何将sql数据放入php表中

javascript - 使用javascript从css检索背景图像而不使用它的ID

javascript - 将正则表达式匹配到字符数组

javascript - 通过拖放复制文件