jQuery如何在子元素选择器中添加类名“.active”到第一个元素?

4
我使用下面的代码将类.active添加到站点链接,但我需要在顶部导航菜单上单击菜单项或其中一个子菜单时也添加类active。例如,如果我单击“admitere”选项卡或其任何子级,则“admitere”选项卡必须保持选定状态,直到选择另一个选项卡。
我想创建所有菜单和相关子菜单的id数组,将子菜单包装在span标签中,这样当选中子菜单时,检查其是否在URL中,并使第一个菜单成为相对选项卡。现在,该网站基于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代码可以更短。这是一种草稿解决方案。 请发布改进意见。 谢谢

目前问题是在首次网页访问时激活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;}
4个回答

1

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

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

0

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

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

0
我会使用jQuery的.closest()函数来实现这个。我会给每个第一个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");
  }
}

0
将此代码放在页面底部,就在</body>上方:
$('#content2-colsx a').each(function() {
  $(this).closest('li').addClass('active');
});

把这个放在页面底部的原因是,那时DOM已经填充了相关元素 - 因此不需要添加 'onload' 事件处理程序。
由于您无论如何都会使用JQuery,因此最好使用该库提供的选择器函数简化代码,而不是使用 getElementById。
抱歉,刚才意识到您在原始问题中实际上没有提到JQuery。为了使上述方法有效,您应该将其包含在页面的 元素中: 我建议您在此任务中使用 JQuery ,因为不仅您的代码会更易于阅读,还可以更轻松地使用经过充分记录和广泛使用的库。 而不是立即深入研究JavaScript。
如果您确实想要走本地路线,我建议您购买以下内容:
  • Douglas Crockford的JavaScript: The Good Parts
  • John Resig的Pro Javascript Techniques

非常感谢您的快速回复。我会尽快进行测试。再次感谢您。 - Roberto
@Roberto - 没问题,如果你发现这个回答解决了你的问题,请记得打上“√”标记 :) 谢谢 - isNaN1247

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接