本文详解 jquery `:contains()` 选择器在实际使用中常被误用的问题,指出 `body:contains(...)` 恒为真导致逻辑失效的根本原因,并提供结构优化、选择器精炼与健壮性增强的完整解决方案。
jQuery 的 :contains(text) 是一个全字匹配但不区分边界的伪类选择器——它只要目标元

更关键的是,:contains() 不支持正则或转义特殊字符(如 [、]、(、)),直接传入 "[aaa]" 或 "(kk-aka)" 会导致语法错误或意外匹配。例如,[aaa] 中的方括号在 CSS 选择器中具有特殊含义,未经处理会破坏选择器结构。
✅ 正确做法是:
以下是修正后的完整示例:
Date:
Upcoming Event: Asia Cup 2030
This page contains Date information and upcoming Asia-related events.
$(document).ready(function() {
const $content = $('#content-area'); // 精准定位内容容器
// ✅ 安全关键词:纯文本、无特殊符号、语义清晰
const dateKeyword = "Date";
if ($content.text().includes(dateKeyword)) {
$("#date").show();
$("#current-date").text(new Date().toDateString());
} else {
$("#date").hide();
}
const mnKeyword = "Asia";
if ($content.text().includes(mnKeyword)) {
$("#mn").show();
} else {
$("#mn").hide();
}
});? 进阶建议:
总结:body:contains(...) 不是可靠的条件判断依据。真正可控的方式是——限定作用域 + 使用纯文本关键词 + 采用 .text().includes() 原生方法替代 jQuery 伪类。这不仅修复了当前 Bug,也显著提升了代码可维护性与跨 jQuery 版本兼容性。