0

我在一个小型 asp.net 项目中使用的水平导航有问题。导航包含登录、配置文件和注销锚点,如果您已登录或未登录,则会显示这些锚点。

我通过在后面的代码中设置 .Visible 属性来实现这种行为。

现在我想在每个元素之后添加一个管道作为“分隔符”。这不能是实际列表项本身的一部分,因为它会破坏 a:hover 效果。

但即使元素不在DOM 树中,也会显示管道分隔符。看起来像

登录 | | |

我试过用

if ($("li.nav-item").length == 0) {
            $('span.divider').remove();
        }
        if ($("li.nav-item").length > 0 && $("li.nav-item").is(':visible')) {
            $('<span class="divider"> | </span>').appendTo('li.nav-item');
        }

但这不起作用。我该如何解决这个问题?

亲切的问候。

/edit: html 标记(编辑的 ID)

<ul id="navigation">
                <li class="nav-item"><asp:HyperLink ID="link1" runat ="server" Text="LoremIpsum"      NavigateUrl="#" /></li>
                <li class="nav-item"><asp:LinkButton ID="LoremIpsum" runat ="server" Text="LoremIpsum" PostBackUrl="~/#.aspx"  /></li>
                <li class="nav-item"><asp:HyperLink ID="link2" runat="server"  Text="LoremIpsum" NavigateUrl="#.aspx"/></li>
                <li class="nav-item"><asp:HyperLink ID="linkLogin" runat="server" Text="Login" NavigateUrl="~/login.aspx"/></li>
                <li class="nav-item"><asp:HyperLink ID="linkProfile" runat="server" Text="Profile" NavigateUrl="~/profile.aspx" Visible="false"/></li>
                <li class="nav-item"><asp:HyperLink ID="linkLogout" runat="server" Text="Logout" NavigateUrl="~/logout.aspx" Visible="false"/></li>
                <li><asp:HyperLink ID="LoremIpsum" runat="server" Text="LoremIpsum" NavigateUrl="~/nutzungsbedingungen.aspx"/></li>
                </ul>


if (Session["svar_loggedin"] != null)
    {
        linkLogin.Visible = false;
        linkProfile.Visible = true;
        linkLogout.Visible = true;
    }
    else
    {
        linkLogin.Visible = true;
        linkProfile.Visible = false;
        linkLogout.Visible = false;
    }
4

2 回答 2

2

试试这个js:

$.each($("li.nav-item").children("a").filter(":visible"), function (e) {
    $('<span class="divider"> | </span>').appendTo($(this));
});

编辑:

要么使用 css 而不是 Visible 属性:

linkLogin.Attributes.Add("style", "display:none")

or alt. iterate through the controls, check if visible == true, if so add the span-markup to the Text-attribute

于 2012-09-17T08:29:31.080 回答
2
  $(function () {
        var elements = $('li.nav-item > a').filter(':visible');
        for (var i = 0; i < elements.length - 1; i++) {
            elements.eq(i).append($('<span class="divider"> | </span>'));
        }

    });

in my case this did the trick. I was not realising that my Code Behind was altering the asp:Hyperlink controls and not the list items.

I changed my Jquery Snippet accordingly to relate to all anchors which are a child of list-items with the class 'nav-item'.

thank you all for bringing me back on track!

于 2012-09-17T11:09:08.237 回答