【问题标题】:How to get elements with multiple classes如何获取具有多个类的元素
【发布时间】:2011-08-25 02:44:38
【问题描述】:

说我有这个:

<div class="class1 class2"></div>

如何选择这个div 元素?

document.getElementsByClassName('class1')[0].getElementsByClassName('class2')[0]

这行不通。

我知道,在 jQuery 中,它是 $('.class1.class2'),但我想用 vanilla JavaScript 选择它。

【问题讨论】:

    标签: javascript class element


    【解决方案1】:

    其实跟jQuery很像:

    document.getElementsByClassName('class1 class2')
    

    MDN Doc getElementsByClassName

    【讨论】:

    • 如何获取只有一个类的元素,这是@Joe指定的那个
    • 因为我记得课程没有“。” document.getElementsByClassName('class1 class2')
    • 在给定的 MDN 链接中,在 getElements 参数中的类名之前不使用点。我在 Firefox 和 chrome 上检查了这个,它没有点,但没有点。
    【解决方案2】:

    AND (两个类)

    var list = document.getElementsByClassName("class1 class2");
    var list = document.querySelectorAll(".class1.class2");
    

    (至少一个类)

    var list = document.querySelectorAll(".class1,.class2");
    

    XOR (一类但不是另一类)

    var list = document.querySelectorAll(".class1:not(.class2),.class2:not(.class1)");
    

    NAND (不是两个类)

    var list = document.querySelectorAll(":not(.class1),:not(.class2)");
    

    NOR (不是这两个类中的任何一个)

    var list = document.querySelectorAll(":not(.class1):not(.class2)");
    

    【讨论】:

    • 这太棒了。应该是顶级的。
    • var list = document.querySelector('.remove_fields.dynamic, .remove_fields.existing') 获取element,如果它有任何组合,但不能同时存在。
    • 非常好的答案和简洁的帮助,谢谢!
    • 我只想在其他答案中添加一些内容。如果要选择特定标签类型的元素,例如&lt;img&gt;,属于多个类,则可以指定标签名称以及querySelectorAll()中的类名称,格式如下document.querySelectorAll("tagname.class1.class2.class3")
    【解决方案3】:

    querySelectorAll 带有标准的类选择器也适用于此。

    document.querySelectorAll('.class1.class2');
    

    【讨论】:

    • 这样不行,需要document.querySelectorAll('.class1, .class2');
    • @bazzlebrush 您的选择器将捕获带有.class1.class2 的元素,而上面的选择器只会捕获带有 both 类的元素,并且确实有效。查看此测试的控制台输出:jsfiddle.net/0ph1p9p2
    • 好吧,我的错,我误解了 OP 想要做什么。但是 IMO 一个更典型的用例是想要选择具有任一类或两者的元素,在这种情况下,我的示例就是您想要的。
    【解决方案4】:

    正如@filoxo 所说,您可以使用document.querySelectorAll

    如果您知道您要查找的类中只有一个元素,或者您只对第一个元素感兴趣,则可以使用:

    document.querySelector('.class1.class2');
    

    顺便说一句,.class1.class2 表示一个具有 both 类的元素,.class1 .class2(注意空格)表示一个层次结构 - 并且具有类 class2 的元素位于具有类 @ 的 en 元素内987654327@:

    <div class='class1'>
      <div>
        <div class='class2'>
          :
          :
    

    如果您想强制检索直接子代,请使用 &gt; 符号 (.class1 &gt; .class2):

    <div class='class1'>
      <div class='class2'>
        :
        :
    

    有关选择器的完整信息:
    https://www.w3schools.com/jquery/jquery_ref_selectors.asp

    【讨论】:

      【解决方案5】:

      好的,这段代码正是你需要的:

      HTML:

      <div class="class1">nothing happens hear.</div>
      
      <div class="class1 class2">This element will receive yout code.</div>
      
      <div class="class1">nothing happens hear.</div>
      

      JS:

      function getElementMultipleClasses() {
          var x = document.getElementsByClassName("class1 class2");
          x[0].innerHTML = "This is the element you want";
      }
      getElementMultipleClasses();
      

      希望对您有所帮助! ;)

      【讨论】:

        【解决方案6】:

        html

        <h2 class="example example2">A heading with class="example"</h2>
        

        javascritp 代码

        var element = document.querySelectorAll(".example.example2");
        element.style.backgroundColor = "green";
        

        querySelectorAll() 方法将文档中与指定 CSS 选择器匹配的所有元素作为静态 NodeList 对象返回。

        NodeList 对象表示节点的集合。可以通过索引号访问节点。索引从 0 开始。

        还可以了解更多关于https://www.w3schools.com/jsref/met_document_queryselectorall.asp

        == 谢谢你==

        【讨论】:

          【解决方案7】:

          实际上@bazzlebrush 的回答和@filoxo 的评论对我帮助很大。

          我需要找到类可能是“zA yO”OR“zA zE”的元素

          使用 jquery 我首先选择所需元素的父级:

          (类以“abc”开头且样式为 !=“display:none”的 div)

          var tom = $('div[class^="abc"][style!="display: none;"]')[0];                   
          

          然后是该元素的所需子元素:

          var ax = tom.querySelectorAll('.zA.yO, .zA.zE');
          

          完美运行!请注意,您不必执行 document.querySelector,您可以像上面一样传入预选的对象。

          【讨论】:

            【解决方案8】:
            const matches = document.querySelectorAll("div.note, div.alert");
            

            know more

            【讨论】:

              猜你喜欢
              • 2015-07-04
              • 2023-03-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-09-06
              • 2021-12-20
              相关资源
              最近更新 更多