如何通过JavaScript或jQuery点击函数验证HTML表格指定列?
验证HTML表格指定列的实现方案(JavaScript/jQuery)
没问题,我来帮你实现点击按钮后对表格里的ID和URL列进行验证的功能。首先先指出你示例代码里的一个小问题:多个<tr>和<td>使用了重复的id属性(比如td、table_id、table_url),这不符合HTML规范(ID必须全局唯一),所以我先把这些重复ID改成class,这样后续选择元素更合理。
修正后的HTML代码
先把你的表格代码调整一下,确保元素选择符合法:
<table class="table table-bordered table-striped table-responsive" id="tableid"> <thead> <tr> <th class="check-col"> <label> <input id="check_all" type="checkbox" name="check"> <span class="label-text table-header-check"></span> </label> </th> <th class="other-col">ID</th> <th>URL</th> </tr> </thead> <tbody id="table-body"> <tr class="table-row"> <td class="check-col"> <label> <input class="select_option" type="checkbox" name="check"> <span class="label-text"></span> </label> </td> <td class="table-id other-col" name="id" contenteditable='true'>1</td> <td class="table-url" name="url" contenteditable='true'>https://fb.com</td> </tr> <tr class="table-row"> <td class="check-col"> <label> <input class="select_option" type="checkbox" name="check"> <span class="label-text"></span> </label> </td> <td class="table-id other-col" name="id" contenteditable='true'>2</td> <td class="table-url" name="url" contenteditable='true'>http://twitter.com/</td> </tr> <tr class="table-row"> <td class="check-col"> <label> <input class="select_option" type="checkbox" name="check"> <span class="label-text"></span> </label> </td> <td class="table-id other-col" name="id" contenteditable='true'>3</td> <td class="table-url" name="url" contenteditable='true'>http://google.com/</td> </tr> </tbody> </table> <div class="buttons-section"> <button type="button" id="valid" class="btn btn-default custom-btn">VALIDATE</button> </div>
方案一:原生JavaScript实现
我们给验证按钮添加点击事件,遍历每一行的ID和URL列,分别验证格式是否正确:
// 获取验证按钮 const validateBtn = document.getElementById('valid'); // 定义验证规则函数 function isValidId(idValue) { // 验证ID是正整数 return /^[1-9]\d*$/.test(idValue.trim()); } function isValidUrl(urlValue) { // 简单的URL格式验证正则(可根据需求调整) const urlRegex = /^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w.-]*)*\/?$/; return urlRegex.test(urlValue.trim()); } // 添加点击事件监听 validateBtn.addEventListener('click', function() { // 获取所有表格行 const rows = document.querySelectorAll('.table-row'); let isValid = true; // 清除之前的验证样式 document.querySelectorAll('.table-id, .table-url').forEach(cell => { cell.style.border = ''; }); rows.forEach(row => { const idCell = row.querySelector('.table-id'); const urlCell = row.querySelector('.table-url'); const idValue = idCell.textContent; const urlValue = urlCell.textContent; const rowNum = Array.from(rows).indexOf(row) + 1; // 验证ID if (!isValidId(idValue)) { idCell.style.border = '2px solid red'; isValid = false; alert(`第${rowNum}行的ID格式错误,请输入正整数!`); } // 验证URL if (!isValidUrl(urlValue)) { urlCell.style.border = '2px solid red'; isValid = false; alert(`第${rowNum}行的URL格式错误,请输入合法的HTTP/HTTPS地址!`); } }); if (isValid) { alert('所有列验证通过!'); } });
逻辑说明:
- 先定义两个验证函数
isValidId和isValidUrl,分别验证ID是否为正整数、URL是否符合基本格式。 - 点击按钮后,先清除之前的验证样式(红色边框),避免干扰新的验证结果。
- 遍历每一行,获取ID和URL单元格的内容,分别调用验证函数。
- 如果验证不通过,给对应单元格添加红色边框,并弹出提示;全部验证通过则提示成功。
方案二:jQuery实现
如果你的项目已经引入了jQuery,代码会更简洁:
// 定义验证规则函数 function isValidId(idValue) { return /^[1-9]\d*$/.test($.trim(idValue)); } function isValidUrl(urlValue) { const urlRegex = /^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w.-]*)*\/?$/; return urlRegex.test($.trim(urlValue)); } // 点击事件绑定 $('#valid').on('click', function() { let isValid = true; // 清除之前的验证样式 $('.table-id, .table-url').css('border', ''); $('.table-row').each(function(index) { const $row = $(this); const idValue = $row.find('.table-id').text(); const urlValue = $row.find('.table-url').text(); const rowNum = index + 1; // 验证ID if (!isValidId(idValue)) { $row.find('.table-id').css('border', '2px solid red'); isValid = false; alert(`第${rowNum}行的ID格式错误,请输入正整数!`); } // 验证URL if (!isValidUrl(urlValue)) { $row.find('.table-url').css('border', '2px solid red'); isValid = false; alert(`第${rowNum}行的URL格式错误,请输入合法的HTTP/HTTPS地址!`); } }); if (isValid) { alert('所有列验证通过!'); } });
逻辑说明:
- 核心逻辑和原生JS一致,只是用jQuery的选择器和方法简化了DOM操作。
- 使用
$.trim()处理文本内容,each()遍历表格行,find()快速定位当前行的目标单元格。
内容的提问来源于stack exchange,提问作者Muhammad Yasir Asif




