使用JS(Greasemonkey)访问表格<td>内按钮及批量触发实现问询
批量触发表格内按钮点击事件的解决方案
我来帮你搞定这个问题!你的需求是点击表格外的按钮,一次性触发<td>里4个按钮的点击事件对吧?先看看你原代码里的几个小问题:
document.getElementsByClassName("myclass")返回的是HTMLCollection类数组对象,不能直接调用.childNodes,得先通过索引拿到具体的<tr>元素,比如加[0]childNodes会把换行、空格这些文本节点也算进去,用它定位元素很容易出错,不如用更精准的选择器- 你原代码只触发了第一个按钮的点击,没处理另外三个,得循环遍历所有目标按钮
接下来是修正后的完整代码,直接就能用:
<table> <tr class="myclass"> <td> <input type="button" value="a" onclick="alert('a')"> <input type="button" value="b" onclick="alert('b')"> <input type="button" value="c" onclick="alert('c')"> <input type="button" value="d" onclick="alert('d')"> </td> </tr> </table> <br /> <button onClick="fn()">click</button> <script> function fn() { // 拿到目标tr元素 const targetTr = document.getElementsByClassName("myclass")[0]; // 在tr里找到所有的按钮 const buttons = targetTr.querySelectorAll("input[type='button']"); // 遍历按钮,逐个触发点击事件 buttons.forEach(btn => btn.click()); } </script>
代码说明:
document.getElementsByClassName("myclass")[0]:精准获取到class为myclass的第一个<tr>元素querySelectorAll("input[type='button']"):在目标<tr>范围内筛选出所有按钮,比用childNodes靠谱多了forEach循环:遍历所有按钮,调用click()方法触发它们的点击事件
如果你想让代码更简洁,也可以换成querySelector直接定位父元素,效果完全一样:
function fn() { const buttons = document.querySelector(".myclass").querySelectorAll("input[type='button']"); buttons.forEach(btn => btn.click()); }
这样点击外部按钮后,四个按钮的alert就会依次弹出来啦!
内容的提问来源于stack exchange,提问作者Subhrayu Majumder
相关产品推荐
相关产品推荐

