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