首页 > 其他分享 >js matches()

js matches()

时间:2024-01-24 17:02:46浏览次数:32  
标签:浏览器 parentElement currentChildElement matches 元素 Element currentChildNode js

matches()方法(在规范草案中称为 matchesSelector())接收一个 CSS 选择符参数,如果元素 匹配则该选择符返回 true,否则返回 false。例如:

if (document.body.matches("body.page1")){
  // true
}

使用这个方法可以方便地检测某个元素会不会被 querySelector()或 querySelectorAll()方 17 法返回。 所有主流浏览器都支持 matches()。Edge、Chrome、Firefox、Safari 和 Opera 完全支持,IE9~11 及一些移动浏览器支持带前缀的方法。

元素遍历

IE9 之前的版本不会把元素间的空格当成空白节点,而其他浏览器则会。这样就导致了 childNodes 和 firstChild 等属性上的差异。为了弥补这个差异,同时不影响 DOM 规范,W3C 通过新的 Element Traversal 规范定义了一组新属性。 20 Element Traversal API 为 DOM 元素添加了 5 个属性:  childElementCount,返回子元素数量(不包含文本节点和注释);  firstElementChild,指向第一个 Element 类型的子元素(Element 版 firstChild); 21  lastElementChild,指向最后一个 Element 类型的子元素(Element 版 lastChild); previousElementSibling, 指 向 前 一 个 Element 类 型 的 同 胞 元 素 (Element 版 previousSibling);  nextElementSibling,指向后一个 Element 类型的同胞元素(Element 版 nextSibling)。 在支持的浏览器中,所有 DOM 元素都会有这些属性,为遍历 DOM 元素提供便利。这样开发者就 不用担心空白文本节点的问题了。 举个例子,过去要以跨浏览器方式遍历特定元素的所有子元素,代码大致是这样写的:

let parentElement = document.getElementById('parent');
    let currentChildNode = parentElement.firstChild;
// 没有子元素,firstChild 返回 null,跳过循环 while (currentChildNode) {
  if (currentChildNode.nodeType === 1) { 25 // 如果有元素节点,则做相应处理
processChild(currentChildNode);
  }
  if (currentChildNode === parentElement.lastChild) {
break; }
  currentChildNode = currentChildNode.nextSibling;
}

使用 Element Traversal 属性之后,以上代码可以简化如下:

let parentElement = document.getElementById('parent');
let currentChildElement = parentElement.firstElementChild;
 // 没有子元素,firstElementChild 返回 null,跳过循环 while (currentChildElement) {
// 这就是元素节点,做相应处理
processChild(currentChildElement);
if (currentChildElement === parentElement.lastElementChild) {
break; }
currentChildElement = currentChildElement.nextElementSibling; }

IE9 及以上版本,以及所有现代浏览器都支持 Element Traversal 属性。

标签:浏览器,parentElement,currentChildElement,matches,元素,Element,currentChildNode,js
From: https://blog.51cto.com/u_16298168/9400105

相关文章

  • js DOM 扩展
    尽管DOMAPI已经相当不错,但仍然不断有标准或专有的扩展出现,以支持更多功能。2008年以前,大部分浏览器对DOM的扩展是专有的。此后,W3C开始着手将这些已成为事实标准的专有扩展编制成正式规范。本章所有内容已经得到市场占有率名列前茅的所有主流浏览器支持,除非特别说明。Java......
  • python创建json文件并换行
     在Python中,您可以使用内置的json 模块创建和操作JSON文件。以下是如何创建一个JSON文件的步骤:1、Json格式JSON数据的书写格式是键(名称)/值对。JSON值可以是:字符串(在双引号中)、数组(在中括号中)、数字(整数或浮点数)、逻辑值(true或false)、对象(在大括号中)、null。JSON......
  • [转]JavaScript:解决计算精度问题/mathjs/bignumber.js/big.js/decimal.js
    原文地址:JavaScript:解决计算精度问题/mathjs/bignumber.js/big.js/decimal.js_js计算精度问题-CSDN博客一、计算精度现象举例举例1、加法 举例2、减法 举例3、乘法 举例3、除法 二、JS为什么会有计算精度的问题JavaScript内部只有一种数字类型Number,也就是说,Java......
  • JS逆向实战27——pdd的anti_content 分析与逆向
    声明本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!本文已在微信公众号发布目标网站aHR0cHM6Ly9tb2JpbGUucGluZHVvZHVvLmNvbS8=任务获取商品列表接口......
  • 在React中使用Bootstrap中的Modal并使用Js控制(非使用Bootstrap-React)
    在React中使用Bootstrap框架组件Render<buttonclassName='btnbtn-primarybtn-sm'onClick={()=>openModal()}>详细</button><divclassName="modalfade"id="info-modal"tabIndex={-1}aria-labelledby=""aria-h......
  • 使用rpa打开浏览器并执行js抓取页面元素详情步骤
    这里我们专门开一个文章来写如何在rpa中执行js获取页面元素。个人觉得,复杂点的需求用js会方便很多,所以后续的文章我都会重点使用js去获取页面元素。好,正文开始,我们先看一下rpa为我们提供的自带的方便的抓取元素的方式,我们还是以小红书为例,还是以上一个例子为例,上个例子我们使......
  • vue print.js 批量打印功能
    批量打印 :1.用到print.js  自行安装  安装完成后 引用  importprintJSfrom'print-js';2.用到深拷贝深拷贝代码:(可以将此代码放在一个页面中,对此进行引用即可,例如:放在until文件中,引用代码 import{deepClone}from'@/utils/index')exportfunctiondeepClone......
  • 【转载】L2Dwidget.js网页二次元看板娘的用法
    最近新建了博客,https://yellowgg.cn,许久不更新的博客园想引个流,可以关注一波嗷。发现某些blog网站左下方或者右下方出现的二次元卡通人物或萌萌阿猫,除了萌,还可以监听鼠标的行为,产生互动的现象。1.关于脚本的生成L2Dwidget.min.js的源码:https://github.com/xiazeyu/live2d-wid......
  • js如何在一个数组内找到特定值,再在这个特定值前后截取十个数得到新数组
     //剪切原原始曲线getSplitTend(){consttimeCompare=[]this.trendOption.series[0].data.forEach(item=>{timeCompare.push(item[0])})//console.log('timeCompare',timeCompare)constindex=timeCompare......
  • nodejs多版本管理
    github下载包               https://sites.ipaddress.com/raw.githubusercontent.com/     https://sites.ipaddress.com/github.com/            1.下载安装包到本地wgethttps://github.com/nvm-sh/nvm/ar......