【问题标题】:Unordered list - list item position无序列表 - 列表项位置
【发布时间】:2016-04-24 17:18:29
【问题描述】:

目前我有一个有 5 个页面的网站,主导航使用无序列表显示。我想要实现的是“活动”页面首先显示在列表中。

例如,如果我有以下页面:“主页 | 关于 | 联系方式 | 博客”。当您在联系页面上时,它应该移到列表的顶部,因此菜单将如下所示:“联系 | 主页 | 关于 | 博客”。

导致我出现问题的原因是该菜单是通过 php 包含的,因此所有页面只有一个菜单,并且通过 PHP 我已经完成了它,以便它向当前页面菜单项添加一个“活动”类。

我不确定最好的解决方案是什么,并且非常感谢任何帮助。

编辑:

这是包含在每个页面中的导航页面:

            <nav class="large-nav">
              <ul>
                <li <?php echo ($activePage == 'ourStory') ? "class='active'" : ""; ?> ><a href="our_story.php" title="">OUR STORY</a></li>
                <li <?php echo ($activePage == 'services') ? "class='active'" : ""; ?> ><a href="services.php" title="">SERVICES</a></li>
                <li <?php echo ($activePage == 'projects') ? "class='active'" : ""; ?> ><a href="projects.php" title="">PROJECTS</a></li>
                <li <?php echo ($activePage == 'contact') ? "class='active'" : ""; ?> ><a href="contact.php" title="">CONTACT</a></li>
                <li <?php echo ($activePage == 'upload') ? "class='active'" : ""; ?> ><a style="margin-right: 0;" href="upload.php#top" title="">UPLOAD</a></li>
              </ul>
            </nav>

【问题讨论】:

  • 这些属性是否存储在无序列表中?你不能把你的活动页面放在无序列表的顶部吗,我的意思是最上面的索引?
  • 你为什么不发布添加“活动”类的代码?为了回答你的问题,修改起来会更容易。
  • 抱歉,我添加了包含的导航页面。

标签: php jquery html css


【解决方案1】:

这是一种使用 Flexbox 排序的纯 CSS 方法。

ul {
  …
  display: flex;
  flex-direction: column;
}

li[class=active] {
  order: -1;
  …
}

演示:http://codepen.io/antibland/pen/ZWjdqL

支持:IE10+、Firefox、Chrome

【讨论】:

    【解决方案2】:

    Jsfiddle link

    jQuery:

    $(function(){
        $("li").on("click", function(){
            $('ul').prepend($(this))
        }) 
    })
    

    HTML

    <ul>
        <li>Home</li>
        <li>Contact</li>
        <li>About</li>
        <li>Blog</li>
    </ul>
    

    【讨论】:

    • 你是什么意思我需要那个?是的,它更简单;记得当我第一次了解append()/prepend()的真正功能时,我感到很惊讶
    • 所以你可以在没有任何帮助的情况下做到这一点。你真正想要什么??如果您真的是说包含的 PHP 文件不能从 jQuery 更改,那么它的想法不好。 PHP 第一次包含页面和活动类,现在您必须通过 jQuery 控制功能,例如完成排序。
    • 我不是操作老兄。顺便说一句,由于页面已重新加载,您的回答无法帮助他(我想其中没有 Ajax 调用)。
    • 哎呀...对不起。我误会了。
    【解决方案3】:

    你可以这样做:

    $('.large-nav li').each(function() { 
        if($(this).find('a').attr('href') == location)
        {
            $('.large-nav ul').prepend($(this))
        }
    })
    

    【讨论】:

    • 为什么不将其与位置进行比较,为什么不直接使用 hasClass('active')?如果不修改位置对象,此代码将无法工作。
    • 我试过了,它可以工作......但你也可以使用hasClass('active') ......我认为没有区别。
    • 在引用位置时是否使用全局位置对象?
    • @Edward 是的
    • 那你不是在比较一个字符串和一个对象吗?你不想要 location.pathname 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 2020-06-17
    • 2019-05-16
    相关资源
    最近更新 更多