Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.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在导航栏中突出显示当前页面_Javascript - Fatal编程技术网

使用Javascript在导航栏中突出显示当前页面

使用Javascript在导航栏中突出显示当前页面,javascript,Javascript,我想制作一个动态导航栏,通过突出显示与当前页面相关的图像按钮边框来识别当前页面。例如,在index.html上突出显示homeButton.jpg。我希望这是动态的,而不是静态编码。我使用的模板,我想主要内容是唯一可编辑的东西 这是我的导航栏HTML代码: <ul id="navbar"> <li><a href="../index.html" ><img id="theImg" src="../images/Buttons/homeBtn.jpg"

我想制作一个动态导航栏,通过突出显示与当前页面相关的图像按钮边框来识别当前页面。例如,在
index.html
上突出显示
homeButton.jpg
。我希望这是动态的,而不是静态编码。我使用的模板,我想主要内容是唯一可编辑的东西

这是我的导航栏HTML代码:

<ul id="navbar">
  <li><a href="../index.html" ><img id="theImg" src="../images/Buttons/homeBtn.jpg" name="homebtn" alt="Home" border="0" /></a></li>
  <li><a href="../pages/about.html"><img src="../images/Buttons/aboutBtn.jpg" alt="About" border="0" /></a></li>
  <li><a href="../pages/mediapages/media.html"><img src="../images/Buttons/mediaBtn.jpg" alt="Media" border="0" /></a></li>
  <li><a href="../pages/downloads.html"><img src="../images/Buttons/downloadBtn.jpg" alt="Download"  border="0" /></a></li>
  <li><a href="../pages/contactpages/contacts.html"><img src="../images/Buttons/contactBtn.jpg" alt="contact"  border="0" /></a></li>
  <li><a href="../pages/blog.html" target="_blank"><img src="../images/Buttons/blogBtn.jpg" alt="blog" border="0" /></a></li>
</ul>

我想知道有没有更好的方法来提高性能?

将JS和CSS分开;首先,在CSS中禁用该样式: CSS:

HTML:

<nav>
  <a href="home.html">Home</a>
  <a href="products.html">Products</a>
  <a href="about.html">About</a>
  </nav>

JS:

var url=”http://example.com/products.html“.分割(“/”)//将字符串替换为location.href
var navLinks=document.getElementsByTagName(“nav”)[0].getElementsByTagName(“a”);
//当然,您可以使用元素以外的其他内容
var i=0;
var currentPage=url[url.length-1];

对于(i;i将JS和CSS分开;首先,将样式设置放在CSS中: CSS:

HTML:

<nav>
  <a href="home.html">Home</a>
  <a href="products.html">Products</a>
  <a href="about.html">About</a>
  </nav>

JS:

var url=”http://example.com/products.html“.split(“/”)//将字符串替换为location.href
var navLinks=document.getElementsByTagName(“nav”)[0].getElementsByTagName(“a”);
//当然,您可以使用元素以外的其他内容
var i=0;
var currentPage=url[url.length-1];

对于(i;i,您不应该在html中使用表示性标记(例如边框)

您可以在每个链接上使用唯一的id,在body元素上使用匹配的类标识符,并使用CSS应用边框样式

虽然它不是完全动态的,但类似于:

HTML:

<body class="home">
您的主要挑战是获取当前页面文件名。如果您正在/计划使用服务器端脚本,并且在URL中附加了变量,例如?p=45252463&x=234,则可能会有点粘

我发现这应该有帮助:


您的html中不应该有表示性标记(例如边框)

您可以在每个链接上使用唯一的id,在body元素上使用匹配的类标识符,并使用CSS应用边框样式

虽然它不是完全动态的,但类似于:

HTML:

<body class="home">
您的主要挑战是获取当前页面文件名。如果您正在/计划使用服务器端脚本,并且在URL中附加了变量,例如?p=45252463&x=234,则可能会有点粘

我发现这应该有帮助:


这为我带来了好处:

  var domain = '{{ DOMAIN }}'; // www.example.com or dev.example.com
  var domain_index =  window.location.href.indexOf(domain);
  var long_app_name = window.location.href.slice(domain_index+domain.length+1); 
  // this turns http://www.example.com/whatever/whatever to whatever/whatever
  app_name = long_app_name.slice(0, long_app_name.indexOf('/')); 
  //now you are left off with just whatever
然后使用jquery添加活动类

$('nav a[href*="' + app_name+'"]').closest('li').addClass('active');
当然还有css:

.active{background:red;}
如果您的html如下所示,则此操作有效:

<ul><li><a href="ee">ee</a></li><li><a href="dd">dd</a></li></ul>

如果你在www.somesite.com/ee-thaen-ee中的应用程序是“应用程序”,那么这将自动使用页面url添加活动类,并将背景颜色设置为红色,它将处于活动状态

  var domain = '{{ DOMAIN }}'; // www.example.com or dev.example.com
  var domain_index =  window.location.href.indexOf(domain);
  var long_app_name = window.location.href.slice(domain_index+domain.length+1); 
  // this turns http://www.example.com/whatever/whatever to whatever/whatever
  app_name = long_app_name.slice(0, long_app_name.indexOf('/')); 
  //now you are left off with just whatever
然后使用jquery添加活动类

$('nav a[href*="' + app_name+'"]').closest('li').addClass('active');
当然还有css:

.active{background:red;}
如果您的html如下所示,则此操作有效:

<ul><li><a href="ee">ee</a></li><li><a href="dd">dd</a></li></ul>

这将使用页面url自动添加活动类,如果您在www.somesite.com/ee thaen ee中的应用程序是“应用程序”,则背景颜色将为红色,并且将处于活动状态

感谢您的回复。我遇到的主要问题是拆分位置。href,现在我知道如何根据我的情况正确拆分代码更小,性能更好谢谢你的回复。我遇到的主要问题是拆分位置。href,现在我知道如何根据我的情况正确拆分代码。代码更小,性能更好。@Sam乐于帮助;如果这解决了你的问题,请确保单击绿色复选框以标记为答案。@Sam乐于帮助;确保单击绿色复选框以标记a如果这解决了您的问题,请回答。过早优化是万恶之源。在获得功能之前,请将性能问题放在一边。过早优化是万恶之源。在获得功能之前,请将性能问题放在一边。