【问题标题】:Set <li> item as active on navigating to particular page将 <li> 项设置为在导航到特定页面时处于活动状态
【发布时间】:2019-03-24 19:36:23
【问题描述】:

我在一个 Asp.Net 网站上工作,在该网站上,我将 Site.Master 中的默认水平导航栏替换为 AdminLTE 示例中可用的导航栏。 AdminLTE Example.

垂直导航栏是这样的

导航栏的代码如下

<ul class="sidebar-menu" data-widget="tree">
                <li class="header">Navigation</li>
                <!-- Optionally, you can add icons to the links -->
                <li>
                    <a href="Default.aspx">
                        <i class="fa fa-home"></i>
                        <span>Home</span>
                    </a>
                </li>
                <li>
                    <a href="About.aspx">
                        <i class="fa fa-question"></i>
                        <span>About</span>
                    </a>
                </li>
                <li>
                    <a href="Contact.aspx">
                        <i class="fa fa-address-book"></i>
                        <span>Contact</span>
                    </a>
                </li>
                <li class="treeview">
                    <a href="#"><i class="fa fa-link"></i> <span>Multilevel</span>
                        <span class="pull-right-container">
                            <i class="fa fa-angle-left pull-right"></i>
                        </span>
                    </a>
                    <ul class="treeview-menu">
                        <li><a href="#">Link in level 2</a></li>
                        <li><a href="#">Link in level 2</a></li>
                    </ul>
                </li>
            </ul>

一旦用户导航到该特定页面,我想将列表项类设置为活动。例如,如果用户点击 About 链接,它将被重定向到 about 页面,然后在该页面上,about 链接的类应更改为 active

我尝试使用这个特定的脚本,但它不适合我

$(function() {
 var pgurl = window.location.href.substr(window.location.href.lastIndexOf("/")+1);
 $("ul li a").each(function(){
      if($(this).attr("href") == pgurl || $(this).attr("href") == '' )
      $(this).addClass("active");
 })

});

不知道我错过了什么。

【问题讨论】:

  • 似乎对我有用,但为了排除故障,我建议检查 pgurl 的值以确保它符合您的预期,例如console.log(pgurl);.
  • 访问“关于” website.com/about 后,您的链接是什么样的?
  • 我刚刚注意到您说要设置“列表项”类。在您的代码中,您设置的是&lt;a&gt; 的类,而不是&lt;li&gt;。你是这个意思吗?如果是这样,请参阅parent()
  • @Innervisions 其 localhost:5583/About.aspx
  • @showdev 我想将
  • 类设置为活动

标签: jquery html asp.net navbar master-pages


【解决方案1】:

您的each 函数基于&lt;a&gt; 元素的选择器。
因此,您当前正在将类添加到 &lt;a&gt; 元素中,正如 $(this) 所引用的那样。
您似乎想将其添加到关联的&lt;li&gt; 元素中。

我推荐 jQuery 的parent()

获取当前匹配元素集中每个元素的父元素,可选地由选择器过滤。

var test_url = 'localhost:5583/About.aspx';

$(function() {
  var pgurl = test_url.substr(test_url.lastIndexOf("/") + 1);
  $("ul li a").each(function() {
    if ($(this).attr("href") == pgurl || $(this).attr("href") == '')
      $(this).parent().addClass("active");
  })
});
.active {
  background-color: yellow;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="sidebar-menu" data-widget="tree">
  <li class="header">Navigation</li>
  <!-- Optionally, you can add icons to the links -->
  <li>
    <a href="Default.aspx">
      <i class="fa fa-home"></i>
      <span>Home</span>
    </a>
  </li>
  <li>
    <a href="About.aspx">
      <i class="fa fa-question"></i>
      <span>About</span>
    </a>
  </li>
  <li>
    <a href="Contact.aspx">
      <i class="fa fa-address-book"></i>
      <span>Contact</span>
    </a>
  </li>
  <li class="treeview">
    <a href="#"><i class="fa fa-link"></i> <span>Multilevel</span>
      <span class="pull-right-container">
        <i class="fa fa-angle-left pull-right"></i>
      </span>
    </a>
    <ul class="treeview-menu">
      <li><a href="#">Link in level 2</a></li>
      <li><a href="#">Link in level 2</a></li>
    </ul>
  </li>
</ul>

或者,主要作为演示,您可以将选择器更改为 li 并测试后代 &lt;a&gt; 元素的 hrefs。

var test_url = 'localhost:5583/About.aspx';

$(function() {
  var pgurl = test_url.substr(test_url.lastIndexOf("/") + 1);
  $("ul li").each(function() {
    if ($('a', this).attr("href") == pgurl || $('a', this).attr("href") == '')
      $(this).addClass("active");
  })
});
.active {
  background-color: yellow;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="sidebar-menu" data-widget="tree">
  <li class="header">Navigation</li>
  <!-- Optionally, you can add icons to the links -->
  <li>
    <a href="Default.aspx">
      <i class="fa fa-home"></i>
      <span>Home</span>
    </a>
  </li>
  <li>
    <a href="About.aspx">
      <i class="fa fa-question"></i>
      <span>About</span>
    </a>
  </li>
  <li>
    <a href="Contact.aspx">
      <i class="fa fa-address-book"></i>
      <span>Contact</span>
    </a>
  </li>
  <li class="treeview">
    <a href="#"><i class="fa fa-link"></i> <span>Multilevel</span>
      <span class="pull-right-container">
        <i class="fa fa-angle-left pull-right"></i>
      </span>
    </a>
    <ul class="treeview-menu">
      <li><a href="#">Link in level 2</a></li>
      <li><a href="#">Link in level 2</a></li>
    </ul>
  </li>
</ul>

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签