JavaScript の querySelector 使用说明
本文记录,JavaScript 中 querySelector 的使用方法。小白贡献,语失莫怪。
// 两种 query 的 method (方法)
document.querySelector(selectors);
document.querySelectorAll(selectors);
为什么要学习 querySelector:
因为 front end 中,JavaScript 的基本逻辑就是: 选取一个 element,然后 do somethong with it;所以,一切的开始,就是要先想办法,抓到那个 element;而 querySelector 就是众多选择器中,特别好用的一个;所以,非常有必要学习;熟练的使用它,就等于迈开了前端 JS 编程,的第一大步!
那么 querySelector 是什么:
document.querySelector()
用于选取 html 中的节点(node | element);相较于传统的 DOM 选择器 (DOM selectors),其特点是,可以使用 CSS 风格的 Selectors;并且几乎支持所有CSS选择器的 syntax 风格;
常用方法,语法对比:
常用的 get 某个节点的方法,无外乎三种,通过 class,tag,id;传统的 DOM 选取,与 querySelector()
的 syntax 对比如下:
// select element by class name
document.getElementsByClassName("class_x");
document.querySelectorAll(".class_x");
// select element by tag name
document.getElementsByTagName("img");
document.querySelectorAll("img");
// select element by id name
document.getElementById("id_x");
document.querySelector("#id_x");
使用 "多个" 选取条件,或 "递进式" 的选取条件 (descendant selector):
选取条件,可以是一个或者多个;多个的情况,并不限制个数,可以是2个,3个 ... N个;
// "递进式" 的选取条件 (descendant selector) (可以夸级) (使用"空格"符号)
document.getElementsByClassName("class_x").getElementsByTagName("img");
document.querySelectorAll(".class_x img");
// "父子递进式" 选取条件 (不可以夸级, 必须是严格的直系父子)
document.querySelectorAll(".parent_class > .child_class > .grandChild_class")
// "父子递进 + 混合式" 选取条件 (使用 ">" 符号)
// 选取 parent_class 中的 child_class 中的 grandChild_class,中的 img tag
document.querySelectorAll(".parent_class > .child_class > .grandChild_class tag_img")
// "递进式" 的选取条件,属性选取 (attribute)
// 选取所有,id属性='large'的,并且class='bg'的,img标签
document.querySelectorAll("img[id='large'][class='bg']");
document.querySelector("img[id='large'][class='bg']");
// "多个" 选取条件, 用逗号隔开 (相当于 A 或 B)
document.querySelectorAll(".class_x, .class_y");
document.querySelectorAll(".class_x, img");
document.querySelectorAll(".class_x, #id_x");
// "单个" 选取条件,返回第一个 match
document.getElementsByClassName("class_x")[0];
document.querySelector(".class_x");
// "多个" 选取条件,返回第一个 match
document.getElementsByClassName("class_x").getElementsByTagName("img")[0];
document.querySelector(".class_x, img");
// 选取类 class_x 中,类名为 big_pic 的 li 标签,下面的,全部兄弟们!
document.querySelectorAll(".class_x li.big_pic ~ li ");
// 选取类 class_x 中,类名为 big_pic 的 li 标签,紧挨着的,下一个兄弟!
document.querySelectorAll(".class_x li.big_pic + li ");
对比 querySelector 和 jQuery:
- 首先 querySelector 比 jQuery 要快!因为 querySelector 是内置方法!
- 使用 querySelector,无需要挂在 jQuery 的文件,减少 overhead!
- jQuery 有各种 filter (例如:":input")! 而 querySelector,没有 jQuery 这种 filter!
- 所以 querySelector 无法使用任何 (":input" 类的) filter!
- 最终 querySelector 还是首选!
其他 querySelector 可使用的 CSS 选择器:
还有很多没介绍的,querySelector 可使用的 CSS 选择器;例如:伪选择器(Pseudo);通用选择器(Universal selector);一般兄弟组合器 "~" (General sibling combinator);紧邻兄弟组合器 "+" (Adjacent sibling combinator)。详情可参见 reference 中的,第4个,和第5个,link,里面有详细的 CSS 选择器的介绍
个人评价:
document.querySelectorAll()
的 "递进式" 选取,很好用;
- 去掉了 "传统 DOM选择器" 中,nest selector 的麻烦
- 代码更简洁了
- 返回的是 nodeList
- 可进一步使用 nodeList.forEach()
而且,可以看出,当 css selectors 组合起来的时候,那种灵巧多变,是多么的强大啊!
任何一个 element 都逃不过,组合的选择中。除非这个 element 不在 html 中!
Reference:
- Document.querySelector() - Web APIs | MDN
- Element.querySelectorAll() - Web APIs | MDN
- Descendant combinator - CSS: Cascading Style Sheets | MDN
- CSS selectors - CSS: Cascading Style Sheets | MDN
- CSS 选择器 - CSS(层叠样式表) | MDN
JavaScript の querySelector 使用说明的更多相关文章
- 利用Sonar定制自定义JS扫描规则(三)——SSLR JavaScript Toolkit 使用说明
在上一篇blog中讲了在sonar中如何新增自定义的JS规则,这里面比较难的地方是XPath语句的编写,而要编写正确的XPath语句,首先要拿到语法的AST,下面我们就来介绍如何使用SSLR Java ...
- javascript querySelector和getElementById通过id获取元素的区别
querySelector和getElementById通过id获取元素的区别 <!DOCTYPE html> <html> <head> <meta cha ...
- 用js读、写、删除Cookie
//已经验证过 // JavaScript Document //使用说明: //设置缓存:setCookie("name",value); //获取缓存:var name=ge ...
- javascript DOM操作之 querySelector,querySelectorAll
javascript DOM操作之 querySelector,querySelectorAll
- javaScript中的querySelector()与querySelectorAll()的区别
之前,在JavaScript获取文档元素一文中,我曾介绍了获取文档元素的几种方法,最后一种方法是通过选择器获取文档元素.它的核心思想便是利用querySelector()或querySelectorA ...
- 【前端】强大的javascript原生选择器querySelector 和 querySelectorAll
querySelector 和 querySelectorAll 在传统的 JavaScript 开发中,查找 DOM 往往是开发人员遇到的第一个头疼的问题,原生的 JavaScript 所提供的 D ...
- JavaScript中querySelector()和getElementById()(getXXXByXX)的区别
在日常开发中,使用JavaScript获取元素的时候,最常用的方法就是document.getElementById(getXXXByXX)方法.但是最近发现有很多地方使用的是querySelecto ...
- javascript选择器querySelector和querySelectorAll的使用和区别
querySelector 和 querySelectorAll 方法是 W3C Selectors API规范中定义的.他们的作用是根据 CSS 选择器规范,便捷定位文档中指定元素. 目前几乎主流浏 ...
- javascript函数querySelector
querySelector用于获得dom节点,可以接受三种类型的参数:id(#),class(.),标签.很像jquery的选择器.不过只能返回一个子孙元素,但是jquery选择器的话,可以返回一组元 ...
随机推荐
- luoguP4383 [八省联考2018]林克卡特树(树上dp,wqs二分)
luoguP4383 [八省联考2018]林克卡特树(树上dp,wqs二分) Luogu 题解时间 $ k $ 条边权为 $ 0 $ 的边. 是的,边权为零. 转化成选正好 $ k+1 $ 条链. $ ...
- synchronized底层实现原理及锁优化
一.概述 1.synchronized作用 原子性:synchronized保证语句块内操作是原子的 可见性:synchronized保证可见性(通过"在执行unlock之前,必须先把此变量 ...
- springboot 设定访问项目的根路径
springboot的配置文件application.yml: spring.mvc.view.prefix : / spring.mvc.view.suffix : .html server: po ...
- 用 Java 写一个折半查找?
折半查找,也称二分查找.二分搜索,是一种在有序数组中查找某一特定元素的搜索算法. 搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束:如果某一特定元素大于或者小于中间元素,则 ...
- java-spring
Spring-IOC ioc概念 控制反转 把对象创建和对象之间的调用过程,交给Spring 进行管理. 目的就是,为了降低耦合度,因为当你想在一个类当中调用另外一个类的方法,你需要获得另外一个类的实 ...
- spring boot 实现优雅的关闭
1.导入jar包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g ...
- Zookeeper 的 java 客户端都有哪些?
java 客户端:zk 自带的 zkclient 及 Apache 开源的 Curator.
- Python学习—(windows系统下)安装pygame
浏览器搜索pygame的windows安装程序,下载与python版本相匹配的文件. 如果.exe文件直接运行: 如果.whl文件,将其复制到要用到的项目文件夹中,在cmd窗口中切换到该文件所在的文件 ...
- 如何将Matlab中“模糊控制设计器”的隶属度函数导出图片(figure)
如何将Matlab中"模糊控制设计器"的隶属度函数导出图片(figure)详情参考matlab官方帮助手册:plotmf()函数https://www.mathworks.com/ ...
- Altium design使用日常故障总结
1.altiumdesigner09如何将不同的板子拼在一起发给工厂?打开这两个图,其中一个图ctrl+a,ctrl+c,打开另一个图pastespecial.放置时选取一边对齐.制版时告诉厂家做个V ...