首先查看一下querySelectorAll的文档:
querySelectorAll
返回与指定的选择器组匹配的文档中的元素列表 (使用深度优先的先序遍历文档的节点)。返回的对象是 NodeList
。
用法:
1 | var elementList = document.querySelectorAll(selectors); |
- elementList 是一个静态的 NodeList 类型的对象.
- selectors 是一个由逗号连接的包含一个或多个CSS选择器的字符串.
- 如果 selectors参数中包含
CSS伪元素
,则返回一个空的elementList. - 如果指定的选择器不合法,则抛出一个
SYNTAX_ERR
异常.
坑
如下一个element
1 | <div id="123"> |
document.getElementById(‘123’)可以正常获取到该元素
document.querySelectorAll(‘#123’)则报错
我们看下Zepto中选择器的实现
1 | // `$.zepto.qsa` is Zepto's css selector implementation which |
同样的,zepto中的选择器用的就是querySelectorAll,但是对于简单情况,又可能使用getElementById/getElementsByClassName/getElementsByTagName,
所以对于上面的元素,$(‘#123’)可以获取到元素, $(‘#123 .test’)却会报错,$(‘#123’).find(‘.sddd’)可以正常获取到。
对于如下这种元素使用$(‘#1.2.3-标题’)也会报错1
<div id="1.2.3-标题"></div>
报错信息:
VM238:1 Uncaught DOMException: Failed to execute ‘querySelectorAll’ on ‘Document’: ‘#123’ is not a valid selector.