【问题标题】:How do I turn a table cell <td> into a clickable link that displays hidden column contents?如何将表格单元格 <td> 变成显示隐藏列内容的可点击链接?
【发布时间】:2019-12-11 19:24:33
【问题描述】:

我有一个脚本,可以根据存储在数组中的值生成动态表。

虽然数组有 个属性(相当于七列),但动态表格设计为仅显示 三列 三列 strong>七种可能的列。仅显示七列中的 三列 的原因是布局设计限制。

我想要解决这个问题,是在表格中将 一个 单元格设为可点击的链接 &lt;a href="#"&gt;&lt;/a&gt;,这会打开一个弹出 引导卡显示该特定行的详细内容(包含所有七个属性的值)。

在我的脚本下方找到显示数组配置和动态表脚本:

var array = [{
   TransactionTime: "August 2, 2019 4:34 PM"
   amount: "100"
   payersNumber: "0705357658"
   paymentStatus: "Success! payment received."
   statusIcon: "<i class='fas fa-check-circle colorBlue'></i> <a href='#'>"
   transactionNumber: "ATPid_40a31c1aad441a3de2f70a17669e651a"
   waitersName: "John.P"
},
{
   TransactionTime: "August 1, 2019 2:34 AM"
   amount: "150"
   payersNumber: "0705357658"
   paymentStatus: "Failed! payment not received."
   statusIcon: "<i class='fas fa-check-circle colorRed'></i> <a href='#'>"
   transactionNumber: "ATPid_40a31c1aad441a3de2f70a17669e651a"
   waitersName: "Maggie.A"
}];

table = document.getElementById("table");

var currentTransaction;
var keys = ["statusIcon", "amount", "TransactionTime"];
for (var i = 0; i < array.length; i++) {
  console.log("Number of transactions: " + array.length);
  var newRow = table.insertRow(table.length);

  currentTransaction = array[i];
  for (var b = 0; b < keys.length; b++) {
    var cell = newRow.insertCell(b);
    cell.innerText = currentTransaction[keys[b]];
  }
}

在下面找到我的 HTML 代码:

  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.10.0/css/all.css">
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.10.0/css/v4-shims.css">

  <table id="table" border="1">
    <tr>
      <th>Status</th>
      <th>Amount</th>
      <th>Time</th>
    </tr>
  </table>

您可能已经注意到,所有 状态 单元格/列都变成了链接。如何让这些链接中的每一个都打开到包含特定于每行的所有相关行值的引导卡?

在下面查找生成的表格的示例:

另外,演示表格行结构的 HTML 代码:

【问题讨论】:

    标签: javascript html arrays html-table


    【解决方案1】:

    一种解决方案是不使用锚标记,而是使用 JS 事件侦听器。

    您需要为列中的每一行分配一个唯一的“id”。

    为用户单击状态按钮/图像的每一行和屏幕添加事件侦听器,或者为每个状态按钮/图像添加事件侦听器并遍历 HTML 树以查看按钮属于哪一行。

    一旦您知道被调用的行,您就可以使用 JS 提取信息并将其打包成一个对象,用于您的引导模式/卡片。

    更新: 你可以这样做,

    // after you insert a new row you get the element node back...
    var newRow = table.insertRow(table.length);
    // assign a unique id value to it
    newRow.id = 'something';
    
    // add an event listener to the row
    newRow.addEventListener('click', event => {
        // when someone clicks on the ROW, you get a hit, but you're not sure what part of the row they clicked on...
        //...so create a check to make sure they clicked on the button
        if (event.target === 'some_way_to_indicate_the_status_button') {
            let row_number = event.target.id;
    
            // use the row number to grab all data from that row
            // package all of that data into an object {} or array, whichever you choose, then do what you want with it
        }
    });
    

    【讨论】:

    • 您能否发布一个为该图像的一行显示的 HTML 示例?应该看起来像 img 100 some_date 我需要看看它的结构。
    • 是的,当然,我已经编辑了原始帖子,通过添加图像来附加到原始帖子以显示生成的 HTML 结构。请看一看。
    • 我看不到它,但我假设 被包裹在 中。在创建时将 id 附加到 标记。还要附加一个事件侦听器。剩下的应该是小菜一碟。这个链接应该从那里引导你,w3schools.com/jsref/dom_obj_event.asp
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 2017-01-11
    • 2018-07-09
    • 1970-01-01
    • 2016-04-08
    • 2014-06-25
    • 1970-01-01
    相关资源
    最近更新 更多