You need to enable JavaScript to run this app. Tampermonkey用Mark.js高亮文本致Angular站点按钮失效及优化求助
优惠活动
大模型
产品
解决方案
定价
更多

Tampermonkey用Mark.js高亮文本致Angular站点按钮失效及优化求助

按钮无法点击问题修复

核心原因定位

  • 依赖冲突:脚本重复加载了两个版本的jQuery,同时引入了原生Bootstrap JS,和站点使用的ng-bootstrap指令冲突,覆盖了Angular绑定的按钮点击事件逻辑
  • DOM操作冗余:每次新tr加载时全量遍历页面所有tr节点,频繁修改DOM触发Angular异常变更检测,导致原有节点事件失效

修复步骤

  1. 删除冲突依赖,调整脚本头如下,移除多余的jQuery和原生Bootstrap JS引入:
// @require      https://gist.github.com/raw/2625891/waitForKeyElements.js
// @require      https://raw.githubusercontent.com/julmot/mark.js/master/dist/mark.js
// @include     http://localhost/vortek_php/*
/* globals waitForKeyElements, Mark */
// @grant       GM_addStyle
  1. 调整回调逻辑,仅处理新加载的tr节点,避免全量遍历:
// 注入全局高亮样式,避免逐节点设置行内样式
GM_addStyle(`
.highlight-keyword {
    color: black !important;
    background-color: coral !important;
}
`);

waitForKeyElements (
    'tr',
    handleNewTr
);

function handleNewTr(newTr){
    // 仅处理未添加过高亮的节点
    if (!newTr.querySelector('.highlight-keyword')) {
        const markInstance = new Mark(newTr);
        markInstance.mark("Sta Sword bee pokemon", {
            className: "highlight-keyword"
        });
    }
    // 返回true标记当前节点已处理,无需重复触发
    return true;
}

高亮功能优化

mark.js原生支持不区分大小写、部分匹配的需求,只需添加对应配置项即可:

markInstance.mark("Sta Sword bee pokemon", {
    className: "highlight-keyword",
    caseSensitive: false, // 关闭大小写区分
    accuracy: "partially", // 开启部分匹配,无需整词完全命中
    separateWordSearch: true // 自动拆分多关键词独立匹配
});

如果需要自定义匹配规则,也可以将关键词整理为数组传入,匹配效率更高:

const keywordList = ["sta", "sword", "bee", "pokemon"];
markInstance.mark(keywordList, {
    // 同上配置项
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 15:39:03