技术问询:能否根据后代节点的已访问a:visited链接移除DOM元素?
能否通过后代已访问链接移除父元素?
好问题!答案很明确——不行,这是浏览器隐私保护机制下的硬性限制,具体原因如下:
:visited伪类的权限被严格限制:为了防止恶意网站通过检测样式变化窃取用户的浏览历史(比如通过判断元素是否消失、尺寸变化等方式),现代浏览器对:visited能控制的样式做了极强的约束。只有不影响布局、且无法被脚本检测到的样式(比如文字颜色、背景色)可以被修改,像display: none、visibility: hidden这类会改变元素存在状态的属性,完全不允许通过:visited相关的选择器触发——哪怕是用父元素选择器关联后代的:visited状态。举个实际例子:如果你尝试写这样的CSS代码:
.container:has(a:visited) { display: none; }这段代码在所有主流浏览器里都不会生效。因为浏览器会对
:visited的匹配结果做隐私模糊处理,无论是脚本还是布局计算,都无法区分链接是否被访问过,自然也就无法基于这个状态来修改父元素的DOM存在性。延伸说明:不止是移除元素,任何会导致布局变化、或者能被JavaScript感知到的样式修改,都不能通过
:visited触发。浏览器的这种设计,本质是为了保护用户的浏览历史不被未经授权的网站获取。
内容的提问来源于stack exchange,提问作者Kr0m
相关产品推荐
相关产品推荐

