突出显示重复的<ul></ul>菜单导航# 39;s

Highlighting duplicate <ul></ul> menu navigation's

本文关键字:ul 菜单 导航 显示      更新时间:2023-09-26

我试图设计一个网站的人谁想要这两个联系我们的页面在菜单的底部部分和上面的徽标在右上角。

下面是客户端代码:

这是标识上方的顶部菜单:

<ul class="topnavigation" style="width:1000px; border-bottom-style: none;  height: 40px;">
        <li class="highlight" style="width:100px; height: 40px; font-family:Calibri; float:right;"><a href="ContactUs.aspx">Contact Us</a></li>
        <li style="width:100px; height:40px; font-family:Calibri; border-left:1px solid white; border-right:1px solid white; float:right;"><a href="StartPage.aspx">Home</a></li>
    </ul>

这是徽标下的菜单:

   <ul class="navigation" style="width:1000px; height:40px; border-bottom:none;">
    <li style="width:150px; font-family:Calibri; height: 40px; border-right:1px solid white;"><a href="AboutUs.aspx">About Us</a></li>
    <li style="width:150px; font-family:Calibri; border-right:1px solid white; height: 40px;"><a href="Application.aspx">Applications</a></li>
    <li style="width:200px; font-family:Calibri; border-right:1px solid white; height: 40px;"><a href="FeaturesAndBenefits.aspx">Features and Benefits</a></li>
    <li style="width:200px; font-family:Calibri; border-right:1px solid white; height: 40px;"><a href="TechnicalSpecs.aspx">Technical Specs</a></li>
    <li style="width:150px; font-family:Calibri; border-right:1px solid white; height: 40px;"><a href="ContactUs.aspx">Contact</a></li>
    <li style="width:145px; font-family:Calibri; border-right:none; height: 40px;"><a href="Recognition.aspx">Recognition</a></li>
        </ul>

为了突出显示用户选择的页面,我使用了一些javascript(我最近一直在努力学习)和CSS

JavaScript:

$(document).ready(function () {
var str = location.href.toLowerCase();
$('.topnavigation li a').each(function () {
    if (str.indexOf(this.href.toLowerCase()) > -1) {
        $("li.highlight").removeClass("highlight");
        $(this).parent().addClass("highlight");
    }
});
$('.navigation li a').each(function () {
    if (str.indexOf(this.href.toLowerCase()) > -1) {
        $("li.highlight").removeClass("highlight");
        $(this).parent().addClass("highlight");
    }
});
});
CSS:

ul.navigation
{
margin: 0px;
padding: 0px;
list-style: none;
background-color:#0071BB;
height:34px;
border-bottom:none;
}
ul.navigation li
{ 
float: left;
position: relative;
top: 0px;
left: 0px;
}
ul.navigation li a:last-child{}

ul.navigation a
{
color:white;
display: block;
padding: 8px 8px;
text-decoration: none;
 }
 /*background color of LI*/
 ul.navigation li.highlight
 {
 background:Darkblue;
 }
 /*Text color for A*/
 ul.navigation li.highlight a
 { 
color:white;
  }
 ul.navigation li:hover
{
color:white;
background-color:darkblue;
background: darkblue;
 }
a, a:visited
{
color:#000;
 }

ul.topnavigation
{
margin: 0px;
padding: 0px;
list-style: none;
background-color:#0071BB;
height:34px;
border-bottom:none;
}
ul.topnavigation li
{ 
float: left;
position: relative;
top: 0px;
left: 0px;
}
ul.topnavigation li a:last-child{}

ul.topnavigation a
{
color:white;
display: block;
padding: 8px 8px;
text-decoration: none;
}
/*background color of LI*/
ul.topnavigation li.highlight
{
 background:Darkblue;
}
/*Text color for A*/
ul.topnavigation li.highlight a
{ 
color:white;
}
ul.topnavigation li:hover
{
color:white;
background-color:darkblue;
background: darkblue;
}

使用这种实现,如果用户单击任何页面,它将突出显示该页。但是如果他们点击了顶部角落的联系我们,它只会突出显示底部菜单中的联系我们,而不是顶部菜单。我发现这很奇怪,对我来说这本身就是一个问题,因为我希望它能突出显示顶部而不是底部。(如果有人也能回答这个问题,我会很感激——因为我不知道它是如何识别它的)。

那么,我怎么能让顶部的联系人页面导航和底部的联系人页面导航同时突出显示呢?我假设这将用java脚本完成,而不是c#代码。

我试图将两者结合起来,如

  $('.navigation li a' & '.topnavigation li a').each(function () {

,但意识到这可能不会工作,因为它是索引。虽然我不确定。我尝试将它们设置为"if等价",所以如果两个href是相同的,那么它将突出显示它们。我所做的一切都不起作用(尽管有趣的是,我得到了一些奇怪的结果,突出了其他导航)。

有什么建议吗?给我指个正确的方向?我没有看到的东西,或者这怎么能做到?这需要在c#中完成吗?JavaScript能做到吗?

请告诉我。这是我问的第一个问题,所以我很沮丧。

这里确实不需要each,也不需要组合选择器,除非您要根据它们的根类做一些特殊的事情。你只需要找到一种匹配的方法。下面是一个演示- http://jsfiddle.net/jayblanchard/AEY5h/

编辑:原始代码仍然有效(您需要为您的网站删除e.preventDefault();)

 $('li a').click(function(e) {
        e.preventDefault(); // just for this demo
        var thisHREF = $(this).attr('href'); // get the href of the clicked item
        $('li').removeClass('highlight'); // remove all the classes
        $('a[href="' + thisHREF + '"]').closest('li').addClass('highlight'); // add the class to the items that have the same href
    });

要突出显示与页面匹配的元素,请添加以下内容(在上述代码块之外)-

var currentPage = location.pathname.substring(1);
$('a[href="' + currentPage + '"]').closest('li').addClass('highlight'); // adds highlight to current page element

在小提琴中,我用jsfiddle的信息替换了位置信息,以便两个Contact Us元素都突出显示- http://jsfiddle.net/jayblanchard/AEY5h/1/

你可以像这样使用逗号来组合jQuery选择器:

$('.navigation li a, .topnavigation li a').each(function () {

请注意,逗号包含在单引号中

jQuery错误,从list-items中删除默认的。highlight类

.topnavigation菜单中,不要提供预先选择的.highlight类。

你有一个预选项目与类.highlight,这可能是为什么它似乎是你的脚本正在工作,以突出显示项目在你的.topnavigation菜单,而不是你的.navigation菜单。

另外,你的jQuery有一些错误,我建议组合选择器,因为。each()函数对两者是相同的。

这个修正后的版本应该可以做到这一点(如果没有.highlight预选项目):

$(document).ready(function () {
    var str = location.href.toLowerCase();
    $('.topnavigation li a, .navigation li a').each(function () {
        if (str.indexOf($(this).attr('href').toLowerCase()) > -1) {
            $(this).parent().addClass("highlight");
        }
    });
});
示例JSFiddle: http://jsfiddle.net/gfullam/0rppzomt/

使用jQuery将多个选择器组合成一个的正确方法不是这样的:

$('.navigation li a' & '.topnavigation li a')

而不是像这样:

$('.navigation li a, .topnavigation li a')

这里有一个关于多选择器用法的更多文档的链接。在你的javascript中做这个改变,你应该正确地选择所有你想要瞄准的元素。