如何使用filter/includes获取Elementor表单中的select输入框?
问题解决与优化方案
你之前的代码抓不到select元素,核心原因是select元素的type属性值不是"select"——单选select的type是select-one,多选是select-multiple,所以你的keep.includes(input.type)匹配不上它。另外原生textarea本身没有type属性,你能抓到它可能是Elementor生成的DOM里给textarea加了自定义type值,但这种依赖不稳定,更稳妥的方式是直接通过标签名判断元素类型。
下面给你两种更清晰、更可靠的过滤方案:
方案一:分类定义要保留的元素类型
这种方式逻辑清晰,后续要调整保留的元素时,直接修改数组即可:
document.getElementById('download').addEventListener('click', function(e) { // 定义要保留的元素标签(大写,因为tagName返回值是大写) const targetTags = ['SELECT', 'TEXTAREA']; // 定义要保留的input类型 const targetInputTypes = ['text']; const formElements = Array.from(document.getElementById('pos_form').elements); const filteredElements = formElements.filter(element => { // 要么是指定标签的元素,要么是符合类型的input return targetTags.includes(element.tagName) || targetInputTypes.includes(element.type); }); console.log(filteredElements); });
方案二:极简条件判断
如果要保留的元素类型固定,直接写判断条件更简洁:
document.getElementById('download').addEventListener('click', function(e) { const formElements = Array.from(document.getElementById('pos_form').elements); const filteredElements = formElements.filter(el => el.tagName === 'SELECT' || el.tagName === 'TEXTAREA' || el.type === 'text' ); console.log(filteredElements); });
这两种方案都能准确捕获select、textarea和text类型的input,同时自动排除隐藏字段(type="hidden")、按钮(type="button"/"submit"/"reset")等不需要的元素,逻辑比你之前混合标签名和type属性的方式更严谨。
内容的提问来源于stack exchange,提问作者SkylarP
相关产品推荐
相关产品推荐

