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

JS如何获取未知id和class的元素值与textContent,实现多站点通用内容修改

解决方案

场景1:匹配id/class包含指定关键词的元素

你示例中需要筛选所有id和titles相关的元素,直接使用CSS属性模糊选择器即可实现,不需要提前知道完整的id/class名称:

// 匹配所有id包含titles、或class包含titles的元素,多个规则用逗号分隔
const targetElements = document.querySelectorAll('[id*="titles"], [class*="titles"]');

// 遍历修改元素内容
targetElements.forEach(el => {
  el.textContent = '替换后的自定义内容';
});

可按需调整属性匹配规则:

  • [attr^="关键词"] 匹配属性值以指定关键词开头的元素
  • [attr$="关键词"] 匹配属性值以指定关键词结尾的元素
  • [attr*="关键词"] 匹配属性值任意位置包含指定关键词的元素

场景2:匹配任意元素的文本内容(全站点通用,无需硬编码id/class)

你提到的遍历文档的思路可行,但不要直接修改innerHTML,会破坏页面原有的事件绑定、样式结构。正确做法是遍历所有文本节点,仅修改文本内容,同时可以配合MutationObserver处理动态加载的内容:

// 自定义替换规则,支持字符串和正则匹配
const replaceRules = [
  { match: '要替换的原文本', replace: '替换后的新文本' },
  { match: /匹配的正则规则/g, replace: '替换后的新内容' }
];

// 递归遍历所有文本节点
function traverseTextNodes(node) {
  // 跳过不需要修改的标签
  if (['SCRIPT', 'STYLE', 'NOSCRIPT', 'IFRAME'].includes(node.tagName)) return;
  
  node.childNodes.forEach(child => {
    // 处理文本节点
    if (child.nodeType === Node.TEXT_NODE) {
      let text = child.textContent;
      replaceRules.forEach(rule => {
        text = text.replaceAll(rule.match, rule.replace);
      });
      if (text !== child.textContent) child.textContent = text;
      return;
    }
    // 递归遍历元素子节点
    if (child.nodeType === Node.ELEMENT_NODE) traverseTextNodes(child);
  });
}

// 页面加载完成后执行全量替换
window.addEventListener('load', () => traverseTextNodes(document.body));

// 监听DOM变化,处理动态加载的内容(比如无限滚动、异步渲染的内容)
const observer = new MutationObserver(mutations => {
  mutations.forEach(mutation => {
    mutation.addedNodes.forEach(node => {
      if (node.nodeType === Node.ELEMENT_NODE) traverseTextNodes(node);
    });
  });
});
observer.observe(document.body, { childList: true, subtree: true });

该方案不依赖任何站点的id、class规则,只要页面文本命中你设置的匹配规则就会自动替换,可在任意站点运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 05:21:03