锚文本链接为空时 tooltip 显示为 null 的问题

现象描述

当前版本似乎锚文本链接属性为空时,指针移到锚文本上会显示 null

PixPin20250309114424.png

PixPin20250309114504.png

尝试用 css 代码片段处理,但是该内容时单纯的文本节点,貌似纯 css 无法处理该情况

PixPin20250309114539.png

PixPin20250309114839.png

当前行为用于利用 html 的 title 属性来为文本做简单的注释,虽然创建无链接属性的锚文本用于注释可能不太常见,但光标移入时显示 null 可能还是不太合适(对于非开发者来说)

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    25893 引用 • 107282 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    9945 引用 • 45161 回帖 • 76 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • xqh042

    用 ai 缝了个脚本移除 tooltip 的文本内容实现隐藏 null,作为一个临时方案凑合用(

    效果如图,移除了 null 文本和设置了高度避免被鼠标遮挡:

    PixPin20250309124306.png

    (function() { // 处理 tooltip 的函数 function handleTooltip(tooltipElement) { if (!tooltipElement) return; // 检查 tooltip 是否包含 .fn__hr 元素 const hrElement = tooltipElement.querySelector('.fn__hr'); if (!hrElement) return; // 获取 .fn__hr 的前一个节点 const previousNode = hrElement.previousSibling; if (!previousNode) return; // 如果前一个节点不是 span 元素(即为文本节点或其他非 span 元素) if (previousNode.nodeName !== 'SPAN') { // 清空 tooltip 的文本内容,保留 .fn__hr 后面的内容 while (tooltipElement.firstChild && tooltipElement.firstChild !== hrElement) { tooltipElement.removeChild(tooltipElement.firstChild); } // 移除 .fn__hr 节点本身 if (hrElement.parentNode === tooltipElement) { tooltipElement.removeChild(hrElement); } // 调整 tooltip 位置,向下偏移一些以避免被光标遮挡 // 获取当前的 top 值 const currentTop = parseInt(tooltipElement.style.top, 10) || 0; // 设置新的 top 值,向下偏移 15 像素(可根据需要调整) tooltipElement.style.top = (currentTop + 15) + 'px'; } } // 使用 MutationObserver 监听 DOM 变化 function observeTooltips() { const observer = new MutationObserver(mutations => { let tooltipFound = false; let tooltipElement = null; mutations.forEach(mutation => { // 检查添加的节点 if (mutation.addedNodes.length) { // 遍历添加的节点 mutation.addedNodes.forEach(node => { // 检查是否是 #tooltip 或者包含 #tooltip if (node.id === 'tooltip') { tooltipFound = true; tooltipElement = node; } else if (node.nodeType === 1) { // 元素节点 const tooltip = node.querySelector('#tooltip'); if (tooltip) { tooltipFound = true; tooltipElement = tooltip; } } }); } // 检查修改的节点 if (mutation.target.id === 'tooltip') { tooltipFound = true; tooltipElement = mutation.target; } else { const tooltip = mutation.target.querySelector('#tooltip'); if (tooltip) { tooltipFound = true; tooltipElement = tooltip; } } }); // 如果找到了 tooltip 元素,处理它 if (tooltipFound && tooltipElement) { // 使用 setTimeout 稍微延迟处理,确保 tooltip 内容已完全加载 setTimeout(() => { handleTooltip(tooltipElement); }, 0); } }); // 配置观察器 const config = { childList: true, // 观察子节点的添加或删除 subtree: true, // 观察所有后代节点 characterData: true, // 观察文本变化 attributes: true // 观察属性变化 }; // 启动观察器,观察整个文档 observer.observe(document.body, config); // 也检查当前可能已存在的 tooltip const existingTooltip = document.getElementById('tooltip'); if (existingTooltip) { handleTooltip(existingTooltip); } } // 当 DOM 加载完成后初始化 if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', observeTooltips); } else { observeTooltips(); } })();
  • 其他回帖

推荐标签 标签

  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    198 引用 • 543 回帖
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    499 引用 • 1395 回帖 • 245 关注
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    6 引用 • 26 回帖 • 544 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 676 关注
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    185 引用 • 825 回帖
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 35 关注
  • 叶归
    10 引用 • 47 回帖 • 20 关注
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    209 引用 • 2040 回帖
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    171 引用 • 1537 回帖
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 348 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 370 关注
  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 185 关注
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    7 引用 • 30 回帖 • 385 关注
  • 印象笔记
    3 引用 • 16 回帖 • 1 关注
  • OnlyOffice
    4 引用 • 25 关注
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    37 引用 • 157 回帖 • 2 关注
  • 创业

    你比 99% 的人都优秀么?

    82 引用 • 1395 回帖
  • 锤子科技

    锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。

    4 引用 • 31 回帖
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    20 引用 • 245 回帖 • 227 关注
  • 笔记

    好记性不如烂笔头。

    310 引用 • 794 回帖
  • CongSec

    本标签主要用于分享网络空间安全专业的学习笔记

    1 引用 • 1 回帖 • 35 关注
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    108 引用 • 153 回帖
  • SVN

    SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。

    29 引用 • 98 回帖 • 691 关注
  • JSON

    JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。

    52 引用 • 190 回帖 • 1 关注
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    730 引用 • 1281 回帖 • 2 关注
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 615 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    188 引用 • 1057 回帖 • 1 关注