代码之家  ›  专栏  ›  技术社区  ›  Luiz Berti

如果已访问锚标记的父元素,则为其设置样式

  •  3
  • Luiz Berti  · 技术社区  · 11 年前

    我已经使用HTML很长时间了,从来没有做过这样的事情。我有一个 锚定标记 内部 段落标记 ,类似于:

    <p>Hello <a href="path/page.html">World</a></p>

    我想知道是否有办法改变 p 元素if a 已经访问过,只使用CSS。我知道 JavaScript 可以这样做,并且可以随时发布 香草JS 如果您愿意,请回答,以供参考,但我的问题实际上是如何仅使用CSS来实现。

    因为我预测有人会说 “父标记真的有必要吗?” ,我知道 HTML5 计算机辅助系统3 带来了全新的风格和操作内容的方式,而不需要额外的标签,但这不是问题的关键。关键是如果一个人需要的话怎么做 (就我而言,我是这样做的) .

    1 回复  |  直到 11 年前
        1
  •  2
  •   Community CDub    8 年前

    这里有几个问题。

    1. 你不能用纯CSS实现这一点,因为目前它们没有父选择器。如上所述, it is currently included in the working draft for CSS4 .
    2. Questions such as this 建议可以使用JavaScript来检查链接的颜色,并由此推断链接是否被访问。然而,我刚刚在Firefox 27上试用过,但它不再适用于我。我推测这被视为一个安全问题,因为你可能会利用它来计算用户的特定互联网历史。

    最初,我建议使用 ::before 选择器试图实现某种目标,但经过一番挖掘后,我遇到了 this article (and this answer from SO) 这可能会引起读者的兴趣。

    See this JSFiddle ( 已更新 到原生JS)。值得注意的是,我确实尝试了上述答案中提到的本机JavaScript检查,并使用 :visited jQuery中的选择器,但两者都不起作用。

    JS文件

    var anchors = document.getElementsByTagName("a");
    for(var i = 0; i < anchors.length; i ++) {
        var anchor = anchors[i];
        console.log(document.defaultView.getComputedStyle(anchor, null).getPropertyValue('color'));       
    }
    

    HTML格式

    <p>
        <a href="http://google.com">Google</a>
    </p>
    <p>
        <a href="http://nowayjose.com">Never visited</a>
    </p>
    

    CSS格式

    a { color: #00FF00; }
    a:visited { color: #FF0000; }
    

    如何 ! CSS4中的选择器将与 :已访问 规则非常有趣,因为您可以设置不同元素的样式,然后可能查询该元素的样式。