javascript - 您将如何访问动态生成的表格的特定单元格?

标签 javascript html

假设我有一个动态生成的表:

{% for r in result %}
<tr>
        <td>
            <form action="/deleteBook" method="POST">
                <input type="submit" id="deleteBtn" value="Delete"/>
           </form> 
        </td>
        <td>
            <form action="/editBook" method="POST">
                <input type="submit" id="editBtn" value="Edit"/>
           </form> 
        </td>
        <td id="itemID">{{r.itemID}}</td>
        <td> {{r.title}}</td>

</tr>
{% endfor %}

现在我想访问按下相应表单提交按钮的行的 itemID。我知道我的设置方式,每一行都有一个 id“itemID”的列,我只是想知道是否可以轻松引用这些行,即使它们没有唯一的 ID。

最佳答案

您的事件处理程序接收一个 Event 对象,该对象具有两个属性:

  • target ,这是点击的元素
  • currentTarget ,这是您 Hook 事件的元素(可能是 target 的祖先)

我可能会在这里使用事件委托(delegate), Hook click关于tabletbody ,所以currentTarget该表并不是特别有用,但是 target将是按钮。从按钮中您可以找到行 ( tr ),然后在该行中您可以找到 td对于该项目。

我会摆脱所有这些 id不过,从id开始要求在页面上是唯一的。请改用类名。所以:

document.getElementById("id-for-the-table").addEventListener("click", function(event) {
    const item = event.target.closest("tr").querySelector(".itemID");
    // ...use `item` here... For instance, `item.textContent` will be the item ID
});

实例:

document.getElementById("the-table").addEventListener("click", function(event) {
    const item = event.target.closest("tr").querySelector(".itemID");
    // ...use `item` here... For instance, `item.textContent` will be the item ID
    console.log("Item ID: " + item.textContent);
});
// Just for the example, I prevent forms being submitted
document.getElementById("the-table").addEventListener("submit", function(event) {
    event.preventDefault();
});
<table id="the-table">
    <tbody>
        <tr>
                <td>
                    <form action="/deleteBook" method="POST">
                        <input type="submit" class="deleteBtn" value="Delete"/>
                   </form> 
                </td>
                <td>
                    <form action="/editBook" method="POST">
                        <input type="submit" class="editBtn" value="Edit"/>
                   </form> 
                </td>
                <td class="itemID">1</td>
                <td> Title 1</td>
        </tr>
        <tr>
                <td>
                    <form action="/deleteBook" method="POST">
                        <input type="submit" class="deleteBtn" value="Delete"/>
                   </form> 
                </td>
                <td>
                    <form action="/editBook" method="POST">
                        <input type="submit" class="editBtn" value="Edit"/>
                   </form> 
                </td>
                <td class="itemID">2</td>
                <td> Title 2</td>
        </tr>
        <tr>
                <td>
                    <form action="/deleteBook" method="POST">
                        <input type="submit" class="deleteBtn" value="Delete"/>
                   </form> 
                </td>
                <td>
                    <form action="/editBook" method="POST">
                        <input type="submit" class="editBtn" value="Edit"/>
                   </form> 
                </td>
                <td class="itemID">3</td>
                <td> Title 3</td>
        </tr>
    </tbody>
</table>

<小时/>

请注意,它使用新的(ish) closest 元素上的方法。如果您需要支持像IE这样过时的浏览器,您可以对其进行polyfill。

另请注意,我使用了 ES2015+ ( const ),但如果(再次)您需要支持过时的浏览器,则可以使用 var而是在那里。

关于javascript - 您将如何访问动态生成的表格的特定单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60467179/

相关文章:

html - 在 css Grid 中向包装器添加填充会导致水平滚动

javascript - 双击 amCharts 时取消缩放?

javascript - 移动设备上的响应式菜单在滚动时消失了?

javascript - onclick 创建文本框

javascript - 使用 jQuery 将 2 个 HTML 类相乘并输出总计

javascript - 对 HTMLElement#style 的未定义属性赋值的返回值是否保证与赋值相同?

javascript - 如何在单击单选按钮时启用选项卡

javascript - 返回一个函数数组?

html - 如何使div中的子元素垂直居中

jquery - 是否可以将图像放在 html 中的 <hr> 标记上方?