jquery 遍历 asp.net 菜单

标签 jquery asp.net

我觉得这应该是一项简单的任务,但我遇到了问题。我有一个包含在无序列表中的下拉菜单(由 asp.net 菜单控件生成),并且我试图通过 jquery 向选定链接的父链接添加额外的突出显示。这是生成的 HTML:

<div id="MainMenu" class="mainMenuControl">
        <ul class="level1 static" role="menubar">
            <li class="static" role="menuitem"><a class="level1 static selected" href="/default.aspx">Home</a>
            </li>
            <li class="has-popup static" aria-haspopup="MainMenu:submenu:3" role="menuitem"><a
                class="level2 static" href="/store/prodcut.aspx">Product 1</a>
                <ul id="MainMenu:submenu:3" class="level3 dynamic">
                    <li class="dynamic" role="menuitem"><a class="level3 dynamic" href="/store/product/category1.aspx">
                        Category 1</a> </li>
                    <li class="dynamic" role="menuitem"><a class="level3 dynamic" href="/store/product/category2.aspx">
                        Category 2</a> </li>
                </ul>
            </li>
            <li class="has-popup static" aria-haspopup="MainMenu:submenu:10" role="menuitem"><a
                class="level2 static" href="/store/paymentoptions.aspx">Ministries</a>
                <ul id="MainMenu:submenu:10" class="level3 dynamic">
                    <li class="dynamic" role="menuitem"><a class="level3 dynamic" href="/store/paymentoptions/option1.aspx">
                        Option 1</a> </li>
                    <li class="dynamic" role="menuitem"><a class="level3 dynamic" href="/store/paymentoptions/option2.aspx">
                        Option 2</a> </li>
                </ul>
            </li>
        </ul>
    </div>

因此,无论当前用户位于哪个页面,相应的菜单链接都会“选择”该类。但是,如果它们位于主菜单选项之一的子页面上,我希望下拉菜单中的链接及其父链接都具有“选定”类。

我试图根据父/子 url 路径向链接添加类,但我遇到了问题,因为我在 asp.net 中使用 url 重写,以便任何尾随斜杠、默认文档(index.html、默认.aspx)或网址结尾(.html、.aspx 等)被删除。

我尝试过这个,但是,正如我所说,我无法让它工作:

$('.mainMenuControl ul a').each(function () {
            if ($(this).attr('href') == window.location.pathname) {
                $(this).addClass('selected');
                if ($(this).parent('li').parents('.mainMenuControl ul.level1 li').length) {
                    $(this).parent('li').parents('.mainMenuControl ul.level1 li').find('a.static').addClass('selected');
                }
            }
        });

如有任何建议,我们将不胜感激,谢谢!

最佳答案

为什么用 jQuery 来做呢?如果您使用母版页,您可以创建一个名为 lblMenu 的标签。

就像...

<div id="MainMenu" class="mainMenuControl">
  <asp:labelControl text = ""/>
</div>

然后创建一个类,该类接受您要选择的项目名称的覆盖。 在此类中为您的菜单构建 HTML,并且传递给它的选项将针对它们进行选择。

public string BuildMenu(string selected1, string Selected2)
StringBuilder sbMenu = new StringBuilder();

sbMenu.Append("<ul class="level1 static" role="menubar">");
sbMenu.Append .......

return sbMenu.ToString().replace(selected1, selected2);

在您的内容 page_load 事件上放置类似..

lblMenu.Text = className("<a class=""level1 static""","<a class="level1 static selected"");  

关于jquery 遍历 asp.net 菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9144672/

相关文章:

c# - 如何从 .net 控制台应用程序调用 HTTPS Web 服务方法?

javascript - 在小型设备上单击切换按钮时,Bootstrap 导航栏将消失

javascript - 如何在上传前显示图像预览?

javascript - jquery 获取数据标签并用它做一些事情

asp.net - 在 asp.net mvc 中动态添加文本框并将值保存到数据库中

c# - 必须定义参数 '@email'

asp.net 使用 requireSSL 并且仍然能够检查用户是否在非 SSL 页面上进行了身份验证

javascript - 使用相同的 CSS 样式创建多个复选框

javascript - 将数据传递给 jqueryUI 对话框

c# - c#调用带参数的存储过程