使用这些格式'.selector'
和'[class="selector"]'
在DOM中选择有什么区别?
我希望使用两者中的任何一个得到相同的结果,但是在使用第二个变体时找不到该元素。为什么呢?
> document.querySelectorAll('[class="cropped-profile-image__picture"]')
NodeList []length: 0__proto__: NodeList
> document.querySelectorAll('.cropped-profile-image__picture')
NodeList(2) [div.cropped-profile-image__picture.cropped-profile-image__picture--type-cover, div.cropped-profile-image__picture.cropped-profile-image__picture--type-profile]
答案 0 :(得分:3)
.selector
匹配任何任何类selector
的元素。即它将匹配class="selector foo"
。
[class="selector"]
匹配其"selector"
属性中具有完全值class
的任何元素。即不匹配class="selector foo"
。
答案 1 :(得分:3)
不同之处在于.something
选择了所有something
类的元素 - 即使他们有其他类。虽然[class='something']
仅选择仅包含一个类'something'
的元素。
在下面的代码段中,您可以看到.something
将红色边框应用于两个框,而[class='something']
选择器仅将背景颜色应用于第一个框。
div {
width: 100px;
height: 100px;
margin: 5px;
}
.something {
border: 2px solid red;
}
[class='something'] {
background-color: blue;
}

<div class="something"></div>
<div class="something else"></div>
&#13;
答案 2 :(得分:1)
使用属性选择器时,您尝试将完全匹配您传递的字符串。 cropped-profile-image__picture
,仅此而已。
例如,以下<div>
将匹配您的第一个查询选择器:
<div class="cropped-profile-image__picture"></div>
但是这个不会:
<div class="cropped-profile-image__picture another-class"></div>
因为class属性不完全反映了您所查询的内容。
当您使用句点(querySelectorAll('.cropped-profile-image__picture')
)查询某个类时,您使用的是一个DOM API,它将返回具有该类的元素,无论它们是否有更多类。
答案 3 :(得分:0)
选择器仅选择完全匹配,但元素也具有类
cropped-profile-image__picture--type-cover