【问题标题】:How to change class of all children with jquery?如何用jquery改变所有孩子的班级?
【发布时间】:2012-03-13 16:55:50
【问题描述】:

我有以下语法,我想从链接标签中删除所有 css 类。如何使用 jquery 做到这一点?

<div id="nav">
<ul>
<li><a href="" class="foo">aa</a></li>
<li><a href="" class="bar">aa</a></li>
<li><a href="" class="yay">aa</a></li>
</ul>
</div>

【问题讨论】:

    标签: javascript jquery css dom


    【解决方案1】:

    您可以使用removeClass() 方法;如果你在没有参数的情况下调用它,它会删除所有类:

    $('#nav ul a').removeClass();
    

    说明:从匹配元素集中的每个元素中删除单个类、多个类或所有类。

    显然你可以在同一个调用中链接.addClass('someClass');毕竟,您要求更改问题主题中的课程。 ;)

    【讨论】:

      【解决方案2】:
      $('#nav ul li a').each(function(){
          this.className = '';
      });
      

      根据div#nav 选择器查找所有锚点,并删除所有类名。

      【讨论】:

      • 有效,但无需遍历代码中的元素 - 您可以使用 .removeClass()
      • +1 显式循环有什么问题?如果在循环中使用.removeClass(),那将是另一回事,但这里不是这种情况。
      • ...hmmm,但似乎对性能有影响。可能是因为避免了函数调用。
      • ...但是要否决这个答案只是愚蠢的。性能差异永远不会明显。如果性能如此重要,那么一开始就不会使用 jQuery。
      • @epascarello:如果我使用的是removeClass,那你是对的。我只是短路了; @amnotiam:性能可以忽略不计。我用嵌入式循环替换了对 removeClass 的调用,只是将循环放在前面并自己调用直接 DOM 属性。使用each 的任何损失都会在调用堆栈中的更少条目中获得。 (或者在我看来)。
      【解决方案3】:

      如果你想删除每个类,那么是这样的:

      $('#nav a').each(function(){
          $(this).removeAttr('class');
      });
      

      【讨论】:

      • 在修改现有元素时使用属性几乎总是一个坏主意。使用this.className = '';$(this).prop('className', '')(但请参阅我在 BradChristie 的回答中的评论)
      • @epascarello 开放更正,但我认为它在内部使用每个。
      • 我的意思是,没有必要做每个,它可以像选择的答案那样在内部循环。如果元素上有多项更改,而不仅仅是一个属性,您的解决方案会很棒。
      • 我将保持原样并将其作为一种风格选择:)
      【解决方案4】:

      你可以使用$("a").removeClass();

      这里是示例:http://jsfiddle.net/UPsEK/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-14
        • 1970-01-01
        • 2017-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-12
        相关资源
        最近更新 更多