【问题标题】:Highlighting duplicate <ul></ul> menu navigation's突出显示重复的 <ul></ul> 菜单导航
【发布时间】:2014-05-13 13:48:24
【问题描述】:

我正在尝试为希望同时在菜单底部和右上角的徽标上方显示“联系我们”页面的人设计一个网站。

因此这里是客户端代码:

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

<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 () {

但意识到这可能行不通,因为它正在编制索引。虽然我不确定。我试图将它们设置为“如果等效”,因此如果两个 href 相同,那么它将突出显示它们。我所做的一切都没有奏效(尽管有趣的是我得到了一些突出其他导航的奇怪结果)。

那么,有什么建议吗?指出我正确的方向?我没有看到的东西或如何做到这一点?这是否需要在 C# 中完成? JavaScript 能做到吗?

请告诉我。这是我提出的第一个问题,所以我对此感到沮丧。

【问题讨论】:

  • 你听说过fiddle吗?
  • @KingKing 之类的。我对这一切都很陌生。但是,与我在 VS 2013 上测试和运行它相比,小提琴有什么意义呢?还是我不懂小提琴?
  • 我认为他是在建议您设置一个小提琴来演示该问题,以便人们可以帮助您解决它。
  • +1 KingKing 因为我没有用过小提琴,这很漂亮。我在想这是别的东西。
  • 前往jsfiddle.net 并设置测试。

标签: c# javascript jquery html css


【解决方案1】:

你真的不需要 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 的信息替换了位置信息,以便突出显示两个“联系我们”元素 - http://jsfiddle.net/jayblanchard/AEY5h/1/

【讨论】:

  • 您可能想从learn.jquery.com 开始,它非常具有交互性并且使概念非常清晰。你在理解事物的道路上做得很好,你很快就会很棒!
  • preventDefault() 只是阻止点击具有跟随链接的正常操作。我只是将它放在那里以在 jsfiddle 中进行演示。您想突出显示悬停或其他事件吗?它应该在您的 ASP 页面中以完全相同的方式工作。
  • 啊哈!您希望在单击发生后该项目将在另一个页面上突出显示。为了做到这一点,你必须对你的代码做一些稍微不同的事情。让我做一些改变。
  • Hmmmm....你检查过每个链接中的 href 值了吗?这里发生了一些奇怪的事情,因为它适用于您提供的标记(已复制到小提琴)。你有这个页面的链接吗?
  • 首先,把每页页眉中的li去掉class="highlight"。 JavaScript 还必须包含在每个页面上才能正常工作。你在哪里包括 JavaScript?
【解决方案2】:

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

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

请注意,逗号包含在单引号内。

【讨论】:

    【解决方案3】:

    jQuery 错误,从列表项中删除默认的 .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/

    【讨论】:

    • 如何不突出显示整个顶部导航,例如这个是做什么的?
    • 其实这个一直高亮top联系我们
    • @AndrewBringaze 我更新了示例以摆脱不必要的 .removeClass() 方法,并提供了一个指向有效 JSFiddle 的链接。此解决方案的关键是不提供已应用 .highlight 的预选项目。
    【解决方案4】:

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

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

    而是像这样:

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

    Here's a link 获取有关多选择器用法的更多文档。在您的 javascript 中进行更改,您应该正确地选择您尝试定位的所有元素。

    【讨论】:

    • 链接+1。阅读它,也许它会有所帮助。本身就很有趣。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-29
    • 1970-01-01
    相关资源
    最近更新 更多