如何用Greasemonkey+JavaScript修改指定class的div文本内容?
解决Greasemonkey脚本仅作用于指定class的div并处理文本格式
问题分析
你之前的脚本全页生效,核心原因是用//body/text()选中了页面所有文本节点,没有限定只处理class为sub的div。现在需要精准定位目标元素,再针对性处理文本格式。
修改后的脚本
(function() { 'use strict'; // 获取所有class为sub的div元素 const subDivs = document.querySelectorAll('.sub'); // 遍历每个目标div subDivs.forEach(div => { // 获取div的文本内容并去除首尾空白 let text = div.textContent.trim(); // 正则匹配:剔除「|」及之前、「by」及之后的内容,保留中间时间部分 const processedText = text.replace(/^\d+\s*\|\s*(.*?)\s*by.*$/, '$1'); // 将处理后的文本放回div div.textContent = processedText; }); })();
关键说明
document.querySelectorAll('.sub'):精准锁定所有class为sub的div,彻底避免全页范围的无效操作- 正则表达式
/^\d+\s*\|\s*(.*?)\s*by.*$/:^\d+\s*\|\s*:匹配开头的数字、任意空格、|、任意空格,这部分会被完全剔除(.*?):非贪婪捕获中间的时间内容(比如「10 minutes ago」)\s*by.*$:匹配by及之后的所有内容,这部分也会被剔除
trim():先清理文本首尾的多余空格,避免处理后出现不必要的空白
原脚本的问题点
原脚本用document.evaluate选中了body下所有文本节点,没有范围限定;同时正则写法存在错误(直接把正则字符串当对象键,创建RegExp时会多一层转义,导致匹配逻辑失效)。
内容的提问来源于stack exchange,提问作者Kuppdesto
相关产品推荐
相关产品推荐

