如何使用jQuery获取包含input字段值的元素文本内容
实现包含input值的元素搜索过滤
你的原始搜索过滤函数仅通过$(this).text()获取元素文本,无法识别input这类表单控件的输入值。这里提供几个优化思路和实现方案:
优化思路1:统一封装可搜索内容获取逻辑
可以单独封装一个函数,一次性获取元素的文本内容 + 所有表单控件的有效值,不用分开拼接:
function getSearchableContent($element) { // 先获取元素本身的文本内容 let content = $element.text().trim(); // 遍历所有常见表单控件,追加有效值 $element.find('input, select, textarea').each(function() { const val = $(this).val().trim(); if (val) { content += ' ' + val; } }); return content; } function searchFilter(root, selector, regex) { root.find(selector).each(function() { const $item = $(this); $item.toggle(regex.test(getSearchableContent($item))); }); }
该方案优势:
- 支持更多表单控件(select、textarea也能覆盖)
- 自动过滤空值,避免无效空白字符干扰匹配
- 代码模块化,
getSearchableContent可复用在其他场景
优化思路2:简化临时实现
如果只需要支持input控件,也可以简化你的临时方案,用jQuery的map方法减少冗余代码:
function searchFilter(root, selector, regex) { root.find(selector).each(function() { const $el = $(this); const inputValues = $el.find('input').map(function() { return $(this).val(); }).get().join(' '); $el.toggle(regex.test($el.text() + ' ' + inputValues)); }); }
细节优化点:
- 将
filter改为each更直观,因为我们是对每个元素执行显隐操作,而非筛选元素后操作 - 用
map+get组合可以更简洁地收集input值,无需手动声明数组并push
额外提示
如果页面存在动态新增的input元素,记得在输入变化或元素新增时重新触发搜索过滤逻辑,确保新输入的值能被识别。
内容的提问来源于stack exchange,提问作者Nikki Locke
相关产品推荐
相关产品推荐

