javascript中无法直接查询所有校验节点,但可通过检查required/min/max/minlength/maxlength/pattern/type属性、css伪类(:required等)或element.willvalidate===true来识别参与原生表单校验的input/select/textarea节点。

在 JavaScript 中,没有内置的 API 直接“查询所有具有数据校验规则的节点”,但你可以通过检查元素是否具备常见的校验相关 HTML 属性或约束 API 状态,来识别那些**浏览器会执行原生表单校验**的节点。这类节点通常是 <input>、<select></select>、<textarea></textarea>,且满足以下任一条件:
检查原生校验属性
这些属性明确声明了校验规则,浏览器会据此触发 checkValidity() 和提交拦截:
-
required:必填项 -
min/max(适用于number、date、range) -
minlength/maxlength(适用于text、email、password等) -
pattern:正则校验(如pattern="[0-9]{3}") -
type为校验型类型(如email、url、number、date、checkbox等)——注意:text本身无校验,但加了pattern或required就有
用 CSS 伪类辅助筛选(推荐结合使用)
浏览器对校验状态暴露了 :valid、:invalid、:required 等伪类,可直接用于选择器:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
document.querySelectorAll('input:required, select:required, textarea:required');
// 或更宽泛地抓取所有可能参与校验的节点(含已失效但带规则的)
document.querySelectorAll('input[required], input[pattern], input[min], input[max], input[minlength], input[maxlength], select[required], textarea[required], textarea[minlength], textarea[maxlength]');
用 JavaScript 检查约束 API 状态
即使某些属性是动态添加或 JS 设置的,也可通过 element.validity 和 element.willValidate 判断:
-
element.willValidate === true表示该元素属于表单控件,且当前参与原生校验流程(例如不是type="hidden"或disabled,且至少有一个校验条件) - 可遍历所有表单控件,过滤出
willValidate为true的节点
示例代码:
const validatingNodes = Array.from(
document.querySelectorAll('input, select, textarea')
).filter(el => el.willValidate);
注意边界情况
以下节点不视为具有校验规则,即使名字相似:
-
input[type="hidden"]、input[type="button"]、input[type="reset"]——willValidate为false - 被
disabled或readonly的控件(readonly不影响校验,但disabled会使willValidate === false) - 不在
<form></form>内且未手动调用checkValidity()的独立控件(仍可能有willValidate === true,只要它本身支持校验) - 仅通过 JS 自定义校验(如监听
input手动设setCustomValidity)的节点,也属于“有校验规则”,但需额外检查el.validationMessage !== ""或是否有自定义逻辑
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










