如何获取具有多个类的元素

Nat*_*eus 101 javascript element class

说我有这个:

<div class="class1 class2"></div>
Run Code Online (Sandbox Code Playgroud)

如何选择此div元素?

document.getElementsByClassName('class1')[0].getElementsByClassName('class2')[0]
Run Code Online (Sandbox Code Playgroud)

这不起作用.

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

Joe*_*Joe 157

它实际上与jQuery非常相似:

document.getElementsByClassName('class1 class2')
Run Code Online (Sandbox Code Playgroud)

MDN Doc getElementsByClassName

  • 我说我的朋友,每个人都有需要学习的东西. (40认同)
  • 在给定的MDN链接中,在getElements参数中的类名称之前不使用点。我在Firefox和chrome上都进行了检查,它没有点,但是没有点。 (2认同)

Bit*_*lue 153

AND (两个类)

var list = document.getElementsByClassName("class1 class2");
var list = document.querySelectorAll(".class1.class2");
Run Code Online (Sandbox Code Playgroud)

(至少一类)

var list = document.querySelectorAll(".class1,.class2");
Run Code Online (Sandbox Code Playgroud)

XOR (一类但不是另一类)

var list = document.querySelectorAll(".class1:not(.class2),.class2:not(.class1)");
Run Code Online (Sandbox Code Playgroud)

NAND (不是两个类)

var list = document.querySelectorAll(":not(.class1),:not(.class2)");
Run Code Online (Sandbox Code Playgroud)

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

var list = document.querySelectorAll(":not(.class1):not(.class2)");
Run Code Online (Sandbox Code Playgroud)

  • 这是太棒了。应该是顶级的。 (10认同)
  • 我只是想在其他答案中添加一些内容。如果要选择特定标记类型的元素,例如属于多个类的“&lt;img&gt;”,那么您可以按照以下格式“document.querySelectorAll”在“querySelectorAll()”中指定标记名称和类名称(“标签名.class1.class2.class3”)` (2认同)

fil*_*oxo 28

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

document.querySelectorAll('.class1.class2');
Run Code Online (Sandbox Code Playgroud)

  • @bazzlebrush您的选择器将使用`.class1`或`.class2`捕获元素,而上面的那个只捕获具有*两个*类的元素,并且确实可以工作.请参阅此测试的控制台输出:https://jsfiddle.net/0ph1p9p2/ (5认同)
  • 这是不行的,它需要`document.querySelectorAll(" class1的,.class2' .);` (2认同)

guy*_*oni 9

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

如果您知道您正在寻找的课程只有一个元素,或者您只对第一个元素感兴趣,您可以使用:

document.querySelector('.class1.class2');
Run Code Online (Sandbox Code Playgroud)

BTW,while .class1.class2表示具有两个类的元素.class1 .class2(注意空白)表示层次结构 - 和带有类的元素,class2该元素位于带有类的en元素内class1:

<div class='class1'>
  <div>
    <div class='class2'>
      :
      :
Run Code Online (Sandbox Code Playgroud)

如果要强制检索直接子项,请使用>sign(.class1 > .class2):

<div class='class1'>
  <div class='class2'>
    :
    :
Run Code Online (Sandbox Code Playgroud)

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