【问题标题】:Difference between className and classListclassName 和 classList 的区别
【发布时间】:2021-11-20 11:28:31
【问题描述】:

在什么情况下应该优先选择以下哪一项?

btnElement.classList.add('btn');

btnElement.className = 'btn';

【问题讨论】:

  • 一个添加一个类,另一个设置整个类字符串。在具有任何其他类的元素上尝试它,您会发现不同。

标签: javascript html css dom


【解决方案1】:

使用“classList”,你可以添加或删除一个类而不影响任何 其他元素可能有。但是如果你分配“className”,它会 在添加新类时清除所有现有类(或者如果您 分配一个空字符串,它将清除所有字符串)。

分配“className”可以方便您的情况 肯定不会在元素上使用其他类,但我会 通常只使用“classList”方法。

而且“classList”也有方便的“toggle”和“replace”方法。

https://teamtreehouse.com/community/difference-between-classlist-and-classname

【讨论】:

    【解决方案2】:

    使用“classList”,您可以添加或删除一个类,而不会影响该元素可能拥有的任何其他类。但是如果你分配“className”,它会在添加新的类时清除所有现有的类(或者如果你分配一个空字符串,它会清除所有的类)

    类列表

    使用 classList,您可以添加或删除一个类,而不会影响该元素可能具有的任何其他类。

    因此,这有助于向包含其他类的元素添加其他类。

    classList 有一些方便的方法,例如切换和替换。

    if (clicked) {
        button.classList.add('clicked');
    } else {
        button.classList.remove('clicked');
    }
    

    如果按钮被点击,它将添加被点击的类以及元素可能具有的其他类,它只会从元素中删除被点击的类。

    类名

    如果您使用 className,它会在添加新类时清除所有现有类(或者如果您分配一个空字符串,它将清除所有类)。

    当您知道此元素不会使用任何其他类时,使用 className 会很方便。

    if (clicked) {
        button.className = 'clicked';
    } else {
        button.className = '';
    }
    

    在这种情况下,className 将清除该元素可能具有的所有类,并将单击的类添加到其中。空字符串('') 将擦除所有类。

    结论

    建议尽可能使用 className。

    当您需要切换、替换等 classList 方法时使用 classList。

    上下文 https://dev.to/microrony/difference-between-classlist-and-classname-45j7

    【讨论】:

    • 我的建议是尽可能使用 className。”这与我自己的结论相反。
    【解决方案3】:

    ClassList 顾名思义是元素中的类列表。

    如果你在一个元素上有多个类,并且你想添加/删除一个而不改变其余部分,你应该使用classList

    classList 还提供了像toggle 这样非常有用的方法。

    function toggleClass(){
      let txt = document.querySelector("h2");
      txt.classList.toggle("changebg");
    }
    .font-style {
      font-family: sans-serif;
    }
    
    .changebg {
      background-color: lightcoral;
    }
    <h2 class="font-style" >Hello World!</h2>
    <button onclick='toggleClass()'>Toggle Background Class</button>

    【讨论】:

      【解决方案4】:

      您可以看到 JavaScript 中的更改以应用相同的差异,一个是使用 classList,另一个是使用 className

      从第一个 btn 可以清楚地看出,classListclass 中添加了额外的名称,而className 替换了整个class(仅应用了.border)。
      此外,classList 的不同功能是 className 无法实现的,最后使用 toggle 将 4 行代码减少为 1 行。

      所以你应该看看你的需求:比如,如果你想完全替换 class 属性名称而不是使用 className 否则你可以使用 classList 属性与不同的方法 .add() .remove() .replace() .toggle() 只进行特定更改而不妨碍class 的所有名称

      以下 sn-p 说明:单击一个按钮时重新加载 sn-p,以便在下一个 btns 上可以看到明显的差异

      var classList1 = document.getElementById("part1")
      var classname2 = document.getElementById("part2")
      
      function funcAdd() {
        classList1.classList.add("border");
        classname2.className = "border";
      }
      
      function funcRemove() {
        classList1.classList.remove("color");
        classname2.style.color = "black";
      }
      
      function funcReplace() {
        classList1.classList.replace("background", "background1");
        classname2.style.backgroundColor = "lightgreen";
      }
      
      function funcToggle() {
        classList1.classList.toggle("color1");
        if (classname2.style.color == "gold") {
          classname2.style.color = "blue";
        } else {
          classname2.style.color = "gold";
        }
      }
      .background {
        background-color: red
      }
      
      .background1 {
        background-color: lightgreen
      }
      
      .color {
        color: blue
      }
      
      .font {
        font-size: 24px;
      }
      
      .border {
        border: 10px solid black
      }
      
      .color1 {
        color: gold;
      }
      <div id="part1" class="background color font">classList</div>
      <br><br><br>
      
      <div id="part2" class="background color font">className</div>
      <br><br><br>
      
      <button onclick="funcAdd()">Add a border class</button>
      <button onclick="funcRemove()">Remove a color class</button>
      <button onclick="funcReplace()">Replace a background class</button>
      <button onclick="funcToggle()">Toggle a color class</button>
      <br><br>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-21
        • 1970-01-01
        • 2020-01-08
        • 1970-01-01
        • 2012-09-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多