【问题标题】:Add class to <li> when clicking on a link单击链接时将类添加到 <li>
【发布时间】:2013-07-19 06:54:59
【问题描述】:

这是我的菜单的 html:

<ul class="nav">
    <li><a href="#a" class="active">A</a></li>
    <li><a href="#b" >B</a></li>
    <li><a href="#c" >C</a></li>
    <li><a href="#d" >D</a></li>
</ul>

我希望,在我点击菜单中的链接后,活动类将添加到点击的&lt;li&gt;

提前致谢

【问题讨论】:

标签: javascript html css


【解决方案1】:

使用 jquery

    $("li a").click(function() {
    $('li a').not(this).removeClass('active');
    $(this).toggleClass('active');
    });

DEMO Updated

【讨论】:

  • 它不会删除旧的活动类
【解决方案2】:

他并不是要一个 jQuery 解决方案。但是 jQuery 将是理想的选择,这里是如何使用 javascript、最佳实践、事件委托和现代来做到这一点。也许有人也从中学到了一些新东西。

http://jsfiddle.net/N9Hem/

window.onload = function(){

    (function(){
        var els = [];
        var doc = document;
        var get = function(id){return doc.getElementById(id);};

        get('clickable').onclick = function(evt){
            evt = evt || window.event;
            var el = evt.target || evt.srcElement;
            els = doc.querySelectorAll('#clickable a');

            if(el.nodeName == "A"){
                for(var i = els.length - 1; i >= 0; i -= 1){
                    els[i].className = '';
                };
                el.className = 'active';
            };

        };

    })();

};

【讨论】:

    【解决方案3】:

    如果你使用 jQuery,那么你可以使用如下代码:

    $(function () {
        $(".nav a").click(function () {
            $(".nav a").removeClass("active");
            $(this).addClass("active");
        });
    });
    

    【讨论】:

      【解决方案4】:

      用 jQuery 试试这个

      $('#nav li a').click(function(){
          $('#nav li a').removeClass('active');
          $(this).addClass('active');
      });
      

      【讨论】:

        【解决方案5】:

        这是一个不使用 jquery 的原型,因为您没有就您的问题提出要求。 它使用活动类搜索当前元素,将其删除并将该类添加到单击的类中。

        Javasript 函数

        function activeThis(element){
            var current = document.getElementsByClassName("active")[0];
            current.className = null;
            element.className="active";
        }
        

        HTML 代码

        <a href="#b" onclick="activeThis(this)">
        

        【讨论】:

          【解决方案6】:

          我希望我得到了你想要的...我将 eventHandlers 添加到 &lt;ul&gt;。点击时从前一个元素中删除点击并设置点击类(如果当前类是活动的??)

          <ul class="nav">
              <li><a href="#a" class="active">A</a></li>
              <li><a href="#b">B</a></li>
              <li><a href="#c">C</a></li>
              <li><a href="#d">D</a></li>
          </ul>
          <script>
              var clickedElem = null;
              document.getElementsByClassName("nav")[0].addEventListener("click", function (e) {
                  if (clickedElem)
                      clickedElem.removeAttribute("class");
          
                  // check if e.srcElement.className is active?? that's what you want?
                  e.srcElement.className = "clicked";
                  clickedElem = e.srcElement;
              });
          </script>
          

          【讨论】:

          • 最好在 UL 上添加一个事件处理程序。
          • ...并确保其跨浏览器!
          【解决方案7】:

          这个应该适合你

          elems =document.getElementsByClassName("nav")[0].getElementsByTagName("a");
          for (var i = 0; i < elems.length; i++) {
                  elems[i].addEventListener("click", function (e) {
                          for (var i = 0; i < elems.length; i++) {
                              elems[i].className="";
                          };
                          this.className = "active";
                  });
          }
          

          【讨论】:

            【解决方案8】:

            我想这会奏效

            var navlinks = document.getElementByClass('nav').getElementsByTagName('a');
            for (var i = 0; i < navlinks.length; i++) {
                if(navlinks[i].className == 'active'){
                    navlinks[i].parentNode.parentNode.parentNode.className = 'YOUR CLASS';
                }
            }
            

            【讨论】:

              【解决方案9】:

              检查我的小提琴

              我希望这是你想要的

              http://jsfiddle.net/arunberti/ftZzs/

              a:visited 
              {
                  color:green;
              }
              a:active  {color:yellow;}
              
              a:link {color:red;}   
              

              【讨论】:

              • 我假设这是因为释放鼠标按钮后链接颜色会重置为绿色。据我了解的问题,该链接应保持黄色,直到点击下一个链接。
              【解决方案10】:

              试试这个:

              $('.nav li').click(function(e) {
                  $(this).addClass('selected').siblings().removeClass('selected');
              });
              

              或者,如果您想将click 事件附加到a

              $('.nav a').click(function(e) {
                  e.preventDefault();
                  $('.nav a').removeClass('selected');
                  $(this).addClass('selected');
              });
              

              Example fiddle

              【讨论】:

                【解决方案11】:

                很简单

                jQuery 代码:

                $('.nav li a').on('click',function(){ 
                 $('.nav li').each(function() {
                    var anc=$(this).find('a');
                    if(anc.hasClass('active'))
                    { 
                       $(anc).removeClass('active');
                    }
                 })
                  $(this).addClass('active');
                 })
                

                已编辑: 代码精炼

                快乐编码:)

                【讨论】:

                • 为什么 DV 适合这个?
                • 我同意我的代码中存在拼写错误,因为我是手动编写的而不是运行副本。我不敢相信我对此投了反对票:(
                • 我的例子有效。但对此投反对票,该示例对他不起作用....好吧,我已经标记了这个问题..因为在stackoverflow上有很多很多关于这个主题的例子。
                猜你喜欢
                • 1970-01-01
                • 2011-07-29
                • 2011-01-03
                • 1970-01-01
                • 1970-01-01
                • 2011-09-27
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多