首页 > 作文

JavaScript选择器函数querySelector和querySelectorAll

更新时间:2023-04-03 22:54:37 阅读: 评论:0

目录
一、querylector查询单个元素1. document实例调用2. element实例调用二、querylectorall查询所有元素1、for in遍历的问题2、快照而非实时的问题三、小结

选择器是css非常强大的功能,早先一般是通过getelementbyidgetelementsbytagname来获取页面元素,在一些场景下就很不方便。

后来dom扩展出了lector api标准,其中 lector api level 1 包含了querylectorquerylectorall两个方法,可以通过css选择器匹配页面元素。

一、querylector查询单个元素

querylector用于查询页面中第一个符合规则的元素,可以在document实例和element支付宝五福图片实例上调用,接收一个选择器字符串参数,如果查找到则返回 htmlelement 对象,否则返回null

语法格式如下:

document实例.querylector(选择器字符串);element实例.querylector(选择器字符串);

1. document实例调用

document实例调用是获取整个页面匹配的元素。

简单示例如下:

// 获取body元素let body = document.que雷锋评价rylector("body");console.log(body)// 获取id为container的元素,只会获取第一个let container = document.querylector("#container");console.log(container)// 获取class中包含btn的元素,只会获取第一个let btn = document.querylector(".btn");console.log(btn);// 获取container直接子类class中包含btn的元素,只会获取第一个let containerbtn = document.querylector("#container>.btn");console.log(containerbtn);

2. element实例调用

element实例调用是获取该元素子树内匹配的元素。

简单示例:

// 获取id为container的元素let container = document.querylector("#container");// 需要检测元素对象是否存在,存在才有 querylector 方法if (container) {// 只查找 container 内class包含 btn 的元素。let containerbtn = container.querylector(".btn");console.log(containerbtn);}

理论上来讲,因为css可以通过选择器获取页面任意的元素,所以element实例调用可以直接写成document实例的调用方式,只需要修改选择器字符串参数即可。

例如上例就可以直接写成如下方式当兵给多少钱:

let containerbtn = document.querylector("#container .btn");

并且因为少了一个if判断,代码就更加简洁。当然在有些业务场景下,element实例是已经确定的了,那么直接用 element实例 调用就更加方便了。

二、querylectorall查询所有元素

querylectorall方法和querylector方法类似,只是它是返回所有匹配的元素,类型是nodelist

简单示例:

// 假设页面有两个div类名包含 article// 获取所有类包含 article 的元素let articlelist = document.querylectorall(".article");console.log(articlelist);console.log(articlelist.length);// 控制台输出://nodelist(2) [div.article, div.article]//2

querylectorall方法返回的是所有元素,在实务中经常需要遍历,遍历可以使用常规的for遍历、for of遍历和foreach遍历。

// for of 遍历for (let item of articlelist) {console.log(item);}// for 遍历for (let i = 0; i < articlelist.length; i++) {console.log(articlelist[i]);console.log(articlelist.item(i));}// foreach 遍历articlelist.foreach((item, index) => {console.log(item, index);});

1、for in遍历的问题

如果使用for in遍历,则会把原型链上的一些方法也遍历出来,如entriesforeach等。

2、快照而非实时的问题

使用querylectorall方法获取的nodelist是快照,而非实时的数据。

请看下面这个例子:

// 使用 querylectorall 获取,articlelist 是静态的,非实时的let articlelist = document.querylectorall(".article"feco3);console.log(articlelist);console.log(articlelist.length); // 2ttimeout(() => {// 增加一个元素let div = document.createelement("div");div.classname = "article";document.body.appendchild(div);console.log(articlelist);// 依旧为2console.log(articlelist.length);}, 0);

最后设置了一个定时器,往页面塞了一个classarticlediv元素,但是 articlelist 的长度依旧是2。

如果是用getelementsbyclassname获取,那么 articlelist 就是实时的数据。

请看如下例子:

// 使用 getelementsbyclassname 获取,articlelist是实时的let articlelist = document.getelementsbyclassname("article");console.log(articlelist);console.log(articlelist.lengt散打防守反击h);ttimeout(() => {// 增加一个元素let div = document.createelement("div");div.classname = "article";document.body.appendchild(div);console.log(articlelist);// 这里为3console.log(articlelist.length);}, 0);

在控制台查看打印结果:

htmlcollection动态效果:

使用 getelementsbyclassname 获取的对象是 htmlcollection 类型,会随文档流变化而变化。

三、小结

1. querylectorquerylectorall根据css选择器获取页面元素,功能很强大。2. querylectorall获取的元素是快照,静态的,而非实时的,注意踩坑。

到此这篇关于 javascript选择器函数querylectorquerylectorall的文章就介绍到这了,更多相关 javascript中的querylector和querylectorall内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-03 22:54:35,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/69cfa48226703379fcb6510cad56618b.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:JavaScript选择器函数querySelector和querySelectorAll.doc

本文 PDF 下载地址:JavaScript选择器函数querySelector和querySelectorAll.pdf

标签:元素   遍历   实例   选择器
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图