【问题标题】:jquery add class .active first element on child selectionjquery在子选择上添加类.active第一个元素
【发布时间】:2011-09-12 07:06:02
【问题描述】:

我使用下面的代码将 .active 类添加到站点链接,但是当我单击菜单项或其中一个子项时,我需要在顶部的导航菜单上添加活动类。例如,如果我单击选项卡“admitere”或他的一个孩子,则选项卡“admitere”必须保持选中状态,直到我选择另一个选项卡。

I thought to create an array of all id of the menus and relative sub menus, wrapping the sub menu let's say within a span tag so when a child is selected check it against the url and if inside make the first menu relative tab选择。现在该站点突出显示了基于 Dreamweaver 模板制作的类别的第一个菜单选项卡,但我需要在模板系统之外创建一个动态菜单。

请帮我看看解决问题的正确方法。提前致谢。

这是网站 http://www.univagora.ro

    <script type="text/javascript">
    //<![CDATA[
   function setActive() {
   aObj = document.getElementById('content2-colsx').getElementsByTagName('a');
   for(i=0;i<aObj.length;i++) {
   if(document.location.href.indexOf(aObj[i].href)>=0) {
   aObj[i].className='active';
     }
    }
   }
   //]]>
   </script>
   <script type="text/javascript">
   //<![CDATA[
   window.onload = setActive;
   //]]>
   </script> 


       <div id="menu">
            <ul id="nav">
              <li id="menu_home"><a href="../index.html">home</a></li>
              <li><img src="../images/dropdown/nav_divider.gif" alt=""></li>
              <li id="menu_admitere"><a href="../admitere/admitere.php?expandable=0">ADMITERE</a>
                <div class="nav-active"></div>
                <ul>
                  <li><a href="../admitere/acte.html?expandable=0">Acte necesare</a>
                        <ul>
                            <li><a href="#">test third level</a></li>
                            <li><a href="#">test third level</a></li>
                            <li><a href="#">test third level</a></li>
                        </ul>
                  </li>
                  <li><a href="../admitere/cifre.html?expandable=0">Cifre de scolarizare</a></li>
                  <li><a href="../admitere/desfasurare.html?expandable=0">Desfasurarea admiterii</a></li>
                  <li><a href="../admitere/fisa-inscriere.html?expandable=0">Fisa de &icirc;nscriere candidat</a></li>
                  <li><a href="../admitere/acreditare.html?expandable=0">Acreditare</a></li>
                  <li><a href="../mesajul.html?expandable=0"><em><strong>&#8220; Mesajul Rectorului &#8222;</strong></em></a></li>
                </ul>
              </li>
              <li><img src="../images/dropdown/nav_divider.gif" alt=""></li>
              <li id="menu_programe"><a href="../programe-studii/index.html?expandable=1">PROGRAME DE STUDII</a>
                <div class="nav-active"></div>
                <ul>
                  <li><a href="../programe-studii/drept/index.html?expandable=1&amp;subexpandable=0">Drept</a></li>
                  <li><a href="../programe-studii/politie/index.html?expandable=1">Politie Locala</a></li>
                  <li><a href="../programe-studii/management/index.html?expandable=1&amp;subexpandable=1">Management</a></li>
                  <li><a href="../programe-studii/cig/index.html?expandable=1&amp;subexpandable=2">Contabilitate si Informatica de Gestiune</a></li>
                  <li><a href="../programe-studii/inf-econ/index.html?expandable=1&amp;subexpandable=3">Informatica Economica</a></li>
                  <li><span style="font-size:14px;"><a href="../master/mba-sua.html?expandable=1&amp;subexpandable=4"><em><strong>&#8220;&nbsp;Master MBA AGORA&nbsp;&#8222;</strong></em></a></span></li>
                </ul>
              </li>
              <li><img src="../images/dropdown/nav_divider.gif" alt=""></li>


我们是我的朋友,现在我可以拥有我需要的所有活动元素以及选择的第一个选项卡以记住我正在访问的菜单类别或子菜单。 当然,使用 jquery 代码可以更短。这是一个工作解决方案草案。 请发布改进。 谢谢

目前的问题是在第一次访问web时激活index.html,它只有在选择元素后才有效。

    <head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.3/jquery.min.js"></script>
    <script type="text/javascript">

         function setActive() {
         aObj = document.getElementById('menu').getElementsByTagName('a');
         for(i=0;i<aObj.length;i++) {
         if(document.location.href.indexOf(aObj[i].href)>=0) {
         aObj[i].className='active';
     $(aObj[i]).closest('li.top-level').addClass('activetab');
           }
         }
        aObj2 = document.getElementById('nav').getElementsByTagName('a');
        for(i=0;i<aObj2.length;i++) {
        if(document.location.href.indexOf(aObj2[i].href)>=0) {
        aObj2[i].className='active';
           }
          }
         }

        $(document).ready(function(){
    setActive();
        });

     </script>
    <head>

       <body>

        <div id="menu">
    <ul>
        <li class="top-level"><a href="../index.html" >Home</a></li>
        <li class="top-level"><a href="../product.html" id="current">Products</a>
            <ul>
            <li><a href="../sub1.html">item1</a></li>
                <li><a href="../sub11.html">item2</a></li>
                <li><a href="../sub12.html">item3</a></li>
           </ul>
      </li>
        <li class="top-level"><a href="../other.html">Other</a>
          <ul>
            <li><a href="../sub2.html">itemA</a></li>
            <li><a href="../sub21.html">itemB</a></li>
            <li><a href="../sub22.html">itemC</a></li>
            </ul>
      </li>
        <li class="top-level"><a href="../contact.html">Contact</a></li>
    </ul>
  </div>

      <div class="sidebar1">
      <ul id="nav">
      <li><a href="../index.html">index</a></li>
      <li><a href="../product.html">product</a></li>
      <li><a href="../contact.html">contact</a></li>
      </ul>
      </div>

    <body>

和css

    #menu{
border:none;
border:0px;
margin:0px;
padding:0px;
font: 67.5% "Lucida Sans Unicode", "Bitstream Vera Sans", "Trebuchet Unicode MS";
font-size:14px;
font-weight:bold;
}
    #menu ul{
background:#333333;
height:35px;
list-style:none;
margin:0;
padding:0;
}
#menu li{
    background:#333333 url("images/seperator.gif") bottom right no-repeat;
    float:left;
    padding:0px;
    }
#menu li a{
    color:#cccccc;
    display:block;
    font-weight:normal;
    line-height:35px;
    margin:0px;
    padding:0px 25px;
    text-align:center;
    text-decoration:none;
    }
#menu li a:hover, #menu ul li:hover a{
        background: #2580a2 url("images/hover.gif") bottom center no-repeat;
        color:#FFFFFF;
        text-decoration:none;
        }
#menu li ul{
    background:#333333;
    display:none;
    height:auto;
    padding:0px;
    margin:0px;
    border:0px;
    position:absolute;
    width:225px;
    z-index:200;
    /*top:1em;
    /*left:0;*/
    }
#menu li:hover ul{
    display:block;

    }
#menu li li {
    background:url('images/sub_sep.gif') bottom left no-repeat;
    display:block;
    float:none;
    margin:0px;
    padding:0px;
    width:225px;
    }
#menu li:hover li a{
    background:none;

    }
#menu li ul a{
    display:block;
    height:35px;
    font-size:12px;
    font-style:normal;
    margin:0px;
    padding:0px 10px 0px 15px;
    text-align:left;
    }
#menu li ul a:hover, #menu li ul li:hover a{
        background:#2580a2 url('images/hover_sub.gif') center left no-repeat;
        border:0px;
        color:#ffffff;
        text-decoration:none;
        }
#menu p{
    clear:left;
    }
    li.activetab{ background-color: #F03 !important;}

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    添加carsouel-inner 类和carousel-item 类然后添加active

    $(".carousel-inner .carousel-item:first-child").addClass("active");
    

    【讨论】:

      【解决方案2】:

      我这样做的方法是使用 jQuery 的 .closest() function

      我将为第一个 li 添加一个类(例如 top-level)。

       <ul id="nav">
           <li id="menu_home" class="top-level"><a href="../index.html">home</a></li>
           <li><img src="../images/dropdown/nav_divider.gif" alt=""></li>
           <li id="menu_admitere"  class="top-level"><a href="../admitere/admitere.php?expandable=0">ADMITERE</a>
            ...
      

      在每个链接上,我都会使用最接近的顶层并使其处于活动状态(或者您用来保持标签打开的任何类)

      function setActive() {
        aObj = document.getElementById('content2-colsx').getElementsByTagName('a');
        for(i=0;i<aObj.length;i++) {
          $(aObj[i]).closest(`top-level`).addClass("active");
        }
      }
      

      【讨论】:

        【解决方案3】:

        将此代码放在页面底部,就在&lt;/body&gt;上方:

        $('#content2-colsx a').each(function() {
          $(this).closest('li').addClass('active');
        });
        

        将其放在页面底部的原因是,到那时 DOM 已被相关元素填充 - 因此无需添加“onload”事件处理程序。

        因为无论如何您都将使用 JQuery,所以您最好使用该库提供的选择器函数来简化您的代码,而不是使用 getElementById

        编辑

        抱歉,刚刚意识到您在最初的问题中实际上并没有提到 JQuery。为了使上述内容起作用,您应该将其包含在页面的 &lt;head&gt; 元素中:

        &lt;script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.3/jquery.min.js"&gt;&lt;/script&gt;

        我建议您使用 JQuery 来完成此任务,因为您的代码不仅会更容易阅读,而且如果您只是从 Dreamweaver 模板中的代码开始,它可能会更容易您可以使用文档齐全、使用良好的库。而不是立即深入研究 JavaScript。

        如果您确实想走本地路线,我建议您购买以下副本:

        • Douglas Crockford 的 JavaScript:好的部分
        • John Resig 的 Pro Javascript 技术

        【讨论】:

        • 非常感谢您的快速回复。我会尽快做一个测试。再次感谢您
        • @Roberto - 没问题,如果您发现这可以解决您的问题,请记得用“勾号”标记它:) 谢谢
        【解决方案4】:

        最简单的方法是使用first() 方法:

        $('.carousel-item').first().addClass('active');
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-10-26
          • 1970-01-01
          • 2011-09-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-01
          • 1970-01-01
          相关资源
          最近更新 更多