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

求助:将含:contains()的jQuery代码转换为原生JavaScript

解决jQuery :contains() 转原生JavaScript的问题

你的原生JS函数未成功,核心是和jQuery的:contains()行为存在两处关键差异,以及正则特殊字符的处理疏漏:

  • jQuery的:contains()是大小写不敏感的匹配
  • 直接用RegExp(text)会把文本中的正则元字符(如.、*、?)当成正则语法解析,导致匹配逻辑出错

以下是两种可靠的替代实现:

方案一:使用字符串includes(推荐,更简洁)

利用字符串includes方法,统一转成小写实现大小写不敏感匹配,同时规避正则的潜在问题:

function contains(selector, text) {
  const lowerText = text.toLowerCase();
  return Array.from(document.querySelectorAll(selector)).filter(element => {
    return element.textContent.toLowerCase().includes(lowerText);
  });
}

// 使用方式
const hoveredProjectActive = contains("#cursor-outer .project__caption", hoveredProject);

方案二:转义正则后匹配

如果偏好使用正则,需要先转义文本中的特殊字符,再开启大小写不敏感模式:

// 转义正则特殊字符的工具函数
function escapeRegExp(string) {
  return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}

function contains(selector, text) {
  const regex = new RegExp(escapeRegExp(text), 'i');
  return Array.from(document.querySelectorAll(selector)).filter(element => {
    return regex.test(element.textContent);
  });
}

// 使用方式
const hoveredProjectActive = contains("#cursor-outer .project__caption", hoveredProject);

补充说明

  • 原生JS返回的是DOM元素数组,而jQuery返回的是jQuery对象。如果需要类似jQuery的链式操作(如addClass),可以遍历数组直接操作DOM元素。
  • 两种方案均与jQuery的:contains()行为保持一致:匹配元素及其子元素文本中包含目标文本的元素。

内容的提问来源于stack exchange,提问作者ByGio1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:10:14