Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用CSS更改当前页面的链接颜色_Javascript_Html_Css - Fatal编程技术网

Javascript 使用CSS更改当前页面的链接颜色

Javascript 使用CSS更改当前页面的链接颜色,javascript,html,css,Javascript,Html,Css,当前页面的一种样式链接与其他样式链接有何不同?我想交换文本和背景的颜色 HTML: a:active:单击链接并按住它(active!)。 a:visted:当链接已被访问时 如果希望突出显示与当前页面对应的链接,可以为该链接定义某些特定样式- .currentLink{ 颜色:#640200; 背景色:#000000; } 仅将此新类添加到服务器端或客户端(使用JavaScript)上相应的li(链接)。a:link->它定义了未访问链接的样式 a:hover->它定义了悬停链接的样式 当鼠

当前页面的一种样式链接与其他样式链接有何不同?我想交换文本和背景的颜色

HTML:


a:active
:单击链接并按住它(active!)。
a:visted
:当链接已被访问时

如果希望突出显示与当前页面对应的链接,可以为该链接定义某些特定样式-

.currentLink{
颜色:#640200;
背景色:#000000;
}

仅将此新类添加到服务器端或客户端(使用JavaScript)上相应的
li
(链接)。

a:link
->它定义了未访问链接的样式

a:hover
->它定义了悬停链接的样式


当鼠标在链接上移动时,链接将悬停。

包括此链接!在要更改颜色的页面上另存为.php

<?php include("includes/navbar.php"); ?>

然后在includes文件夹中添加一个新文件

includes/navbar.php

<div <?php //Using REQUEST_URI

$currentpage = $_SERVER['REQUEST_URI'];

if(preg_match("/index/i", $currentpage)||($currentpage=="/"))
    echo " class=\"navbarorange/*the css class for your nav div*/\" ";
elseif(preg_match("/about/*or second page name*//i", $currentpage))
    echo " class=\"navbarpink\" ";
elseif(preg_match("/contact/* or edit 3rd page name*//i", $currentpage))
    echo " class=\"navbargreen\" ";?> >
</div>
includes/navbar.php

最佳和最简单的解决方案:

对于要在切换之前将各自链接的颜色更改为的每个页面,请在每个页面中为“已访问”属性设置一个内部样式,并使每个页面成为一个单独的类,以便区分链接,以免意外地将该功能应用于所有页面。我们将以白色为例:

<style type="text/css">
.link1 a:visited {color:#FFFFFF;text-decoration:none;} 
</style>

.link1A:已访问{颜色:#FFFFFF;文本装饰:无;}

对于链接、活动和悬停等所有其他属性,可以将它们保留在style.css中。当您单击其他链接时,您还需要在其中包含一个已访问的链接,以显示希望链接返回的颜色。

N 1.1的答案是正确的。此外,我还编写了一个小JavaScript函数,用于从列表中提取当前链接,这样可以省去修改每个页面以了解其当前链接的麻烦

<script type="text/javascript">

function getCurrentLinkFrom(links){

    var curPage = document.URL;
    curPage = curPage.substr(curPage.lastIndexOf("/")) ;

    links.each(function(){
        var linkPage = $(this).attr("href");
        linkPage = linkPage.substr(linkPage.lastIndexOf("/"));
        if (curPage == linkPage){
            return $(this);
        }
    });
};

$(document).ready(function(){
    var currentLink = getCurrentLinkFrom($("navbar a"));
    currentLink.addClass("current_link") ;
});
</script>

函数getCurrentLinkFrom(链接){
var curPage=document.URL;
curPage=curPage.substr(curPage.lastIndexOf(“/”);
links.each(函数(){
var linkPage=$(this.attr(“href”);
linkPage=linkPage.substr(linkPage.lastIndexOf(“/”);
如果(curPage==linkPage){
返回美元(此);
}
});
};
$(文档).ready(函数(){
var currentLink=getCurrentLinkFrom($(“导航栏a”);
currentLink.addClass(“当前链接”);
});

使用jQuery,您可以使用
。每个
函数使用以下代码迭代链接:

$(document).ready(function() {
    $("[href]").each(function() {
        if (this.href == window.location.href) {
            $(this).addClass("active");
        }
    });
});
根据您的页面结构和使用的链接,您可能需要缩小链接选择范围,如:

$("nav [href]").each ...
如果您使用的是URL参数,可能需要去除这些参数:

if (this.href.split("?")[0] == window.location.href.split("?")[0]) ...

这样,您就不必编辑每个页面。

例如,如果您试图更改当前页面上仅使用CSS的锚文本,那么这里有一个简单的解决方案

我想将我的软件页面上的锚文本颜色更改为浅蓝色:

<div class="navbar">
    <ul>
       <a href="../index.html"><li>Home</li></a>
       <a href="usefulsites.html"><li>Useful Sites</li></a>
       <a href="software.html"><li class="currentpage">Software</li></a>
       <a href="workbench.html"><li>The Workbench</li></a>
       <a href="contact.php"><li>Contact</a></li></a>
    </ul>
</div>

@普雷斯托
谢谢你的工作对我来说非常好,但我想出了一个更简单的版本来避免改变周围的一切

在所需的链接文本周围添加一个
标记,指定其中的类。(例如主页标签)


不需要单独修改每个页面(将“当前”类添加到特定链接),但仍然不需要JS或服务器端脚本,就可以实现这一点。这使用了:target伪选择器,它依赖于地址栏中出现的
#someid

<!DOCTYPE>
<html>
<head>
    <title>Some Title</title>
<style>
:target {
    background-color: yellow;
}
</style>
</head>
<body>
<ul>
    <li><a id="news" href="news.html#news">News</a></li>
    <li><a id="games" href="games.html#games">Games</a></li>
    <li><a id="science" href="science.html#science">Science</a></li>
</ul>
<h1>Stuff about science</h1>
<p>lorem ipsum blah blah</p>
</body>
</html>

一些头衔
:目标{
背景颜色:黄色;
}
关于科学的东西 益普生知识等等

有几个限制:

  • 如果没有使用这些链接中的一个导航到该页面,它将不会被导航到 有色的
  • ID需要出现在页面顶部,否则 页面在访问时会向下跳一点
只要指向这些页面的任何链接都包含id,并且导航栏位于顶部,就不会有问题


其他页面内链接(书签)也会导致颜色丢失。

JavaScript将完成这项工作。 获取文档中的所有链接,并将它们的参考URL与文档的URL进行比较。如果存在匹配项,则向该链接添加一个类

JavaScript

<script>
    currentLinks = document.querySelectorAll('a[href="'+document.URL+'"]')
    currentLinks.forE‌​ach(function(link) {
        link.className += ' current-link')
    });
</script>
CSS

.current-link {
    color:#baada7;
}
其他注释

上面Taraman的jQuery答案只在
[href]
上搜索,它将返回
链接
标签和除
a
以外的标签,这些标签依赖于
href
属性。正在搜索
a[href=”*https://urlofcurrentpage.com*“]
只捕获符合条件的链接,因此运行速度更快


另外,如果您不需要依赖jQuery库,那么一个普通的JavaScript解决方案无疑是一条可行之路。

您不需要jQuery就可以做到这一点!您所需要的只是一个很小很轻的香草Javascript和一个css类(如上面的所有答案所示):

  • 首先在样式表中定义一个名为current的CSS类

  • 第二,在现有JavaScript文件或单独的js脚本文件中添加以下纯JavaScript(但在页面头部添加指向它的脚本链接),或者仅在结束正文标记之前将其添加到脚本标记中,在所有这些情况下仍然有效


当前链接的“href”属性应该是document.URL(console.log)给出的绝对路径,以确保其相同)

使用类似class=“active”的单个类名,并仅将其添加到当前页面,而不是所有页面。如果您在家,请执行以下操作:

<ul id="navigation">
<li class="active"><a href="/">Home</a></li>
<li class=""><a href="theatre.php">Theatre</a></li>
<li class=""><a href="programming.php">Programming</a></li> 
</ul>

OP实际上是使用PHP吗?不是这样做的一个非常语义化的方式——为什么你不给这个链接对象添加一个类呢?这可能是我读过的最坏的解决方案之一,甚至不要考虑尝试这个。如果你需要改变你的风格,你会
<nav id="top-menu">
    <ul>
        <li> <a href="home.html"><span class="currentLink">Home</span></a> </li>
        <li> <a href="about.html">About</a> </li>
        <li> <a href="cv.html">CV</a> </li>
        <li> <a href="photos.html">Photos</a> </li>
        <li> <a href="archive.html">Archive</a> </li>
        <li> <a href="contact.html">Contact</a></li>
    </ul>
</nav>
<!DOCTYPE>
<html>
<head>
    <title>Some Title</title>
<style>
:target {
    background-color: yellow;
}
</style>
</head>
<body>
<ul>
    <li><a id="news" href="news.html#news">News</a></li>
    <li><a id="games" href="games.html#games">Games</a></li>
    <li><a id="science" href="science.html#science">Science</a></li>
</ul>
<h1>Stuff about science</h1>
<p>lorem ipsum blah blah</p>
</body>
</html>
<script>
    currentLinks = document.querySelectorAll('a[href="'+document.URL+'"]')
    currentLinks.forE‌​ach(function(link) {
        link.className += ' current-link')
    });
</script>
document.querySelectorAll('a[href="'+document.URL+'"]').forE‌​ach(function(elem){e‌​lem.className += ' current-link')});
.current-link {
    color:#baada7;
}


    function highlightCurrent() {
         const curPage = document.URL;
         const links = document.getElementsByTagName('a');
         for (let link of links) {
           if (link.href == curPage) {
             link.classList.add("current");
           }
         }
       }


       document.onreadystatechange = () => {
         if (document.readyState === 'complete') {
           highlightCurrent()
         }
       };

<ul id="navigation">
<li class="active"><a href="/">Home</a></li>
<li class=""><a href="theatre.php">Theatre</a></li>
<li class=""><a href="programming.php">Programming</a></li> 
</ul>
li.active{
color: #640200;
}