Skip to content

Instantly share code, notes, and snippets.

@ricky9w
Last active May 27, 2026 04:47
Show Gist options
  • Select an option

  • Save ricky9w/46f5d65844401f93bd1398aa3122eb49 to your computer and use it in GitHub Desktop.

Select an option

Save ricky9w/46f5d65844401f93bd1398aa3122eb49 to your computer and use it in GitHub Desktop.
知乎直答链接还原 - Tampermonkey 用户脚本,去除知乎回答/文章中的「知乎直答」链接干扰

知乎直答链接还原

一个 Tampermonkey 用户脚本,用于去除知乎回答、文章中被自动插入的「知乎直答」链接干扰。

背景

知乎会自动识别正文中的部分关键词,将其转换为指向 zhida.zhihu.com(知乎直答)的链接,并在词尾附加一个四角星图标。这些链接并非作者本意,且在阅读时造成明显干扰。本脚本将它们还原为普通文字。

工作方式

  • 通过 href 指向 zhida.zhihu.com 来识别直答链接(不依赖随构建变化的 css-* 哈希类名,更稳定)。
  • 将每个直答链接替换为纯文本节点:保留可见文字,移除链接跳转与尾部的四角星图标。
  • 若链接处于 <b> 等标签内,仅替换链接本身,保留加粗等原有样式
  • 首屏内容(服务端渲染)加载后立即处理;并通过 MutationObserver 持续监听,覆盖滚动加载的新回答与单页路由切换的新页面。
  • 纯前端 DOM 操作,@grant none,不请求任何额外权限,不发起任何网络请求。

使用方法

  1. 在浏览器中安装 Tampermonkey 扩展。
  2. 点击 zhihu-zhida-remover.user.jsRaw 按钮,Tampermonkey 会自动弹出安装界面,确认安装即可。
  3. 刷新知乎页面,直答链接将自动还原为普通文字。

生效范围

  • https://www.zhihu.com/*
  • https://zhuanlan.zhihu.com/*(知乎专栏)

许可

MIT

// ==UserScript==
// @name 知乎直答链接还原
// @namespace https://gist.github.com/ricky9w/46f5d65844401f93bd1398aa3122eb49
// @version 0.1.1
// @description 识别知乎回答/文章中被自动转换的「知乎直答」(zhida.zhihu.com) 链接,将其还原为普通文字,去除链接与四角星图标干扰。
// @author ricky9w
// @updateURL https://gist.githubusercontent.com/ricky9w/46f5d65844401f93bd1398aa3122eb49/raw/zhihu-zhida-remover.user.js
// @downloadURL https://gist.githubusercontent.com/ricky9w/46f5d65844401f93bd1398aa3122eb49/raw/zhihu-zhida-remover.user.js
// @match https://www.zhihu.com/*
// @match https://zhuanlan.zhihu.com/*
// @run-at document-start
// @inject-into content
// @noframes
// @grant none
// ==/UserScript==
(function () {
'use strict';
// 「知乎直答」链接均指向 zhida.zhihu.com,以此作为最可靠的判别依据。
const SELECTOR = 'a[href*="zhida.zhihu.com"]';
/**
* 提取链接的可见文字,排除尾部的四角星 <svg> 图标。
* 若文字为空(异常情况),回退到 URL 的 q 参数。
*/
function getLabel(a) {
let text = '';
for (const node of a.childNodes) {
if (node.nodeType === Node.TEXT_NODE) {
text += node.nodeValue;
} else if (node.nodeType === Node.ELEMENT_NODE && node.tagName.toLowerCase() !== 'svg') {
text += node.textContent;
}
}
text = text.trim();
if (!text) {
try {
const q = new URL(a.href).searchParams.get('q');
if (q) text = q;
} catch (_) { /* href 非法时忽略 */ }
}
return text;
}
/** 将单个直答链接替换为纯文字节点。 */
function restore(a) {
const textNode = document.createTextNode(getLabel(a));
// 链接通常被一个无 class 的 <span> 单独包裹,连同一并移除更干净;
// 但若处于 <b> 等语义标签内,则只替换 <a> 本身以保留加粗等样式。
let target = a;
const parent = a.parentElement;
if (parent && parent.tagName === 'SPAN' && !parent.className && parent.childNodes.length === 1) {
target = parent;
}
target.replaceWith(textNode);
}
/** 扫描指定根节点下的所有直答链接并还原。 */
function scan(root) {
if (root.nodeType !== Node.ELEMENT_NODE && root.nodeType !== Node.DOCUMENT_NODE) return;
if (root.matches && root.matches(SELECTOR)) {
restore(root);
return;
}
root.querySelectorAll(SELECTOR).forEach(restore);
}
// 处理首屏(服务端渲染)已存在的内容。
scan(document);
// 知乎为单页应用,回答/文章随滚动与路由动态加载,需持续监听新节点。
const observer = new MutationObserver((mutations) => {
for (const m of mutations) {
for (const node of m.addedNodes) {
scan(node);
}
}
});
observer.observe(document.documentElement, { childList: true, subtree: true });
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment