You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 07:35:22