原生JS-常用选择器详解

原生JavaScript提供了一些选择器,用于选择和操作HTML元素,下面展示下常见选择器方法和之间的区别

1) getElementById方法通过元素的唯一标识符ID来选择元素。它返回指定ID的元素。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script>window.onload = function(){let oDiv = document.getElementById('box')console.log(oDiv)//<div id="box">我是ID</div>}</script>
</head>
<body><div id="id">我是ID</div>
</body>
</html>

兼容性:getElementById方法支持所有常见浏览器版本

2) getElementsByName, 通过name属性获取元素

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script>window.onload = function(){let aNames=document.getElementsByName('box')console.log(aNames)// NodeList(4) [div, span, div, input]}</script>
</head>
<body><div id="box">我是ID</div><div  name="box">我是box1</div><span name="box">我是box2</span><div  name="box">我是box3</div><br />我是pox4<input name="box" type="text" />
</body>
</html>

 getElementsByName方法返回的是一个NodeList集合,兼容性:IE10以下只能获取表单中带name的属性,IE10以上和chrome和FF高版本都可以兼容。(注:IE已废除不更新,所以不考虑IE下可以使用)

3) getElementsByClassName,通过元素的类名来选择元素。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script>window.onload = function(){let aclass=document.getElementsByClassName('box')console.log(aclass)//HTMLCollection(3) [input.box, div.box, div.box]}</script>
</head>
<body><div  class="box2">我是box3</div><br />我是pox4<input class="box" type="text" /><div  class="box">我是box1</div><div  class="box">我是box1</div>
</body>
</html>

getElementsByClassName方法返回一个HTMLCollection集合。兼容性: IE9以下版本不兼容此方法,其他chrome,FF高版本兼容。(注:IE已废除不更新,所以不考虑IE下可以使用)

4)getElementsByTagName,通过元素的标签名称来选择元素。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script>window.onload = function(){let aTags=document.getElementsByTagName('div')console.log(aTags)// HTMLCollection(4) [div#box, div, div.box, div.box, box: div#box]}</script>
</head>
<body><div id="box">我是ID</div><div  name="box">我是box1</div><span name="box">我是box2</span><div  class="box">我是box3</div><div  class="box">我是box4</div>
</body>
</html>

getElementsByTagName方法返回一个指定标签名的所有元素的HTMLCollection集合。兼容:兼容所有IE版本和chrome\FF常见浏览器版本。

5)querySelector, 通过CSS选择器来选择元素

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script>window.onload = function(){// 获取类名为myClass的元素(只匹配第一个)let oClass = document.querySelector('.myClass');console.log(oClass) // <div  class="myClass">我是myClass1</div>// 获取ID为myId的元素let oId = document.querySelector('#myId');console.log(oId) //  <div  id="myId">我是myClass2</div>// 获取多条件组合的元素,选取name为'big'且class为'bigName'的a标签(只匹配第一个)let oA = document.querySelector("a[name='big'][class='bigName']");console.log(oA) // <a href="#" name="big" class="bigName">我是a1</a>// 选取class为‘classBox’的下的span标签(只匹配第一个)let oSpan = document.querySelector(".classBox span");console.log(oSpan) //<span>我是span1</span>// 选取class为‘classBox’的下的i标签(只匹配第一个)let oi = document.querySelector(".classBox > i");console.log(oi) //<i>我是i标签1</i>}</script>
</head>
<body><div  class="myClass">我是myClass1</div><div  class="myClass">我是myClass2</div><div  id="myId">我是myClass2</div><a href="#" name="big" class="bigName">我是a1</a><a href="#" name="big" class="bigName">我是a2</a><div class="classBox"><i>我是i标签1</i><i>我是i标签2</i><span>我是span1</span><span>我是span2</span></div><div class="classBox"><span>我是span</span></div>
</body>
</html>

querySelector它返回第一个匹配选择器的元素。几乎支持所有CSS选择器的方式。兼容性: IE10以下不支持,其他chrome、FF高版本支持。(注:IE已废除不更新,所以不考虑IE下可以使用)

6)querySelectorAll, 通过CSS选择器来选择元素, 返回所有匹配选择器的元素的集合。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script>window.onload = function(){// 获取所有类名为myClass的元素let aClass = document.querySelectorAll('.myClass');console.log(aClass) // NodeList(2) [div.myClass, div.myClass]// 获取所有div标签元素let aDiv = document.querySelectorAll('div');console.log(aDiv) // NodeList(5) [div.myClass, div.myClass, div#myId, div.classBox, div.classBox]// 获取多个条件组合下的元素,选取name为'big'的,并且class为'bigName'的a标签let aA = document.querySelectorAll("a[name='big'][class='bigName']");console.log(aA) // NodeList(2) [a.bigName, a.bigName]// 选取class为‘classBox’的下的span标签let aSpan = document.querySelectorAll(".classBox span");console.log(aSpan) //NodeList(3) [span, span, span]// 选取class为‘classBox’的下的i标签(只匹配第一个)let ai = document.querySelectorAll(".classBox > i");console.log(ai) // NodeList(2) [i, i]// "多个" 选取条件, 用逗号隔开 (相当于 X 或 Y)let aX = document.querySelectorAll(".classX, #idY");console.log(aX) // NodeList(2) [div#idY, div.classX]// 选取类名为list下,类名为listLi的Li标签,下面的全部兄弟节点们         let aBrothers = document.querySelectorAll(".list li.listLi1 ~ li ");console.log(aBrothers)// NodeList(3) [li.listLi, li.listLi3, li.listLi2]// 选取类名为list下,类名为listLi的Li标签,紧挨着的下一个兄弟节点    let prview = document.querySelectorAll(".list li.listLi1 + li ");console.log(prview)// NodeList [li.listLi]}</script>
</head>
<body><div  class="myClass">我是myClass1</div><div  class="myClass">我是myClass2</div><div  id="myId">我是myClass2</div><a href="#" name="big" class="bigName">我是a1</a><a href="#" name="big" class="bigName">我是a2</a><div class="classBox"><i>我是i标签1</i><i>我是i标签2</i><span>我是span1</span><span>我是span2</span></div><div class="classBox"><span>我是span</span></div><div id="idY">我是idY</div><div class="classX">我是classX</div><ul class="list"><li class="listLi4"><strong>我strong</strong></li><li class="listLi1"><strong>我strong</strong></li><li class="listLi"><p>我是p1</p><p>我是p2</p><p>我是p3</p></li><li class="listLi3"><p>我是p4</p><p>我是p5</p></li><li class="listLi2"></li></ul>
</body>
</html>

总之,常见的原生JS选择器一般由上面几种方式,在当前不考虑IE的情况下(IE已停更),所有选择器都可以使用。其中querySelectorAll和querySelector最为强大,几乎支持了所有css选择器的方式,使用起来更为方便

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/17643.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何成为快手外卖代理?本地生活服务平台加盟条件解析

近年来&#xff0c;以抖音、快手和小红书等为代表的互联网大厂纷纷进军本地生活领域&#xff0c;改变美团和饿了么二分天下的这一局面的同时&#xff0c;也让本地生活成为了众多创业者眼中的“香饽饽”。其中&#xff0c;快手凭借着其庞大的用户群体&#xff0c;让快手团购外卖…

华语电影新力量用短片讲述:一部好电影,影响深远

近日&#xff0c;上汽大众杯澳涞坞全球青年电影短片大赛的公益短片《首映》在澳门澳涞坞首映发布&#xff0c;这一作品不仅展示了电影人的真实生活&#xff0c;更深刻地传达了对华语电影的敬意以及对青年电影人的殷切期望。 短片《首映》的制作团队堪称豪华。资深导演杨枫担任…

达梦数据库查看字符集、页大小

1.查看字符集select UNICODE (); 0 表示 GB18030&#xff0c;1 表示 UTF-8&#xff0c;2 表示 EUC-KR 2.查看页大小select SF_GET_PAGE_SIZE(); 也可以通过管理工具去查看

HackTheBox-Machines--Popcorn

文章目录 0x01 端口扫描0x02 测试思路2.1 80端口测试 0x03 /torrent 目录文件上传测试0x04 权限提升 Popcorn 测试过程 0x01 端口扫描 (base) gryphonwsdl ~ %nmap -sC -sV 10.129.138.22 Starting Nmap 7.94 ( https://nmap.org ) at 2024-05-28 14:22 CST Nmap scan report …

【一小时学会Charles抓包详细教程】初识Charles (1)

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;程序猿、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 Charles介绍 …

一键秒删TXT文本符号,释放工作效率新高度,轻松应对海量文本处理挑战!

在这个信息爆炸的时代&#xff0c;我们每天都会面对海量的文本信息。而在处理这些文本时&#xff0c;你是否曾经因为各种符号的干扰而头疼不已&#xff1f;现在&#xff0c;我们为你带来了一款高效批量处理工具&#xff0c;它能够一键删除TXT文本中的符号&#xff0c;让你的工作…

白酒:产地的水资源与酿酒工艺的关联性

云仓酒庄豪迈白酒的酿造过程中&#xff0c;水资源与酿酒工艺之间存在着密切的关联性。水是白酒酿造的重要原料之一&#xff0c;其质量和数量直接影响着酿酒工艺的实施和酒的品质。下面我们和云仓酒庄豪迈白酒来深入探讨一下&#xff0c;产地的水资源如何与酿酒工艺产生关联。 首…

java概念理解

内容源自文心一言/网上文摘等&#xff0c;只是记录下来自己的思考和提问&#xff0c;便于自己回顾 什么是面向接口编程&#xff1f; 思考&#xff1a;以前单机的时候&#xff0c;考虑功能很简单&#xff0c;能实现就行。例如要支付&#xff0c;可能有多种支付方式。那就写一个…

windows部署ollama+maxkb+vscode插件continue打造本地AI

windows部署ollamamaxkbvscode插件continue打造本地AI 前言下载ollamadocker desktopvscode插件continue 安装安装ollama设置环境变量 安装docker desktop部署maxkb容器 安装vscode插件模型搜索和推荐 前言 我采用docker运行maxkb&#xff0c;本地运行ollama形式。可能是windo…

VPN的详细理解

VPN&#xff08;Virtual Private Network&#xff0c;虚拟私人网络&#xff09;是一种在公共网络上建立加密通道的技术&#xff0c;通过这种技术可以使远程用户访问公司内部网络资源时&#xff0c;实现安全的连接和数据传输。以下是对VPN的详细介绍&#xff1a; 选择代理浏览器…

如何防止锂电池反充

锂电池通常用于许多需要备用电源的设备应用中&#xff0c;例如实时时钟 (RTC) 和存储设备。当锂电池不是电路中的单一电源时&#xff0c;如果电池意外连接到可为电池充电的电源&#xff0c;则存在火灾或爆炸的风险。本应用笔记提供了在备用电源开关电路中连接锂电池所需的信息&…

LangChain打造一个AI客服

最近在学习LangChain&#xff0c;langchain的第一个入门应用就是和ChatGPT结合形成的一个AI客服&#xff0c;本期文章就带大家一起认识下 LangChain LangChain是现在用得最多的AI框架&#xff0c;langchain在帮助如基于文档数据的回答、聊天机器人和代理这类的应用程序 langch…

Vue基础(2)响应式基础

一. reactive() 在 Vue3 中&#xff0c;可以使用 reactive() 创建一个响应式对象或数组&#xff1a; <script setup> import { reactive } from vueconst state reactive({ count: 0 }) </script><template><button click"state.count">{…

npm包-fflate

fflate 是一个快速、轻量级且纯JavaScript实现的压缩库&#xff0c;用于处理gzip、zlib和Deflate格式的数据压缩与解压缩。它专注于提供高性能的压缩算法实现&#xff0c;特别适合于浏览器环境及Node.js环境中使用&#xff0c;且不依赖任何外部库。fflate的优势在于其极小的体积…

前端使用JavaScript实现一个LRU缓存

引言 LRU&#xff08;Least Recently Used&#xff09;算法是一种广泛应用于内存管理和缓存系统的策略&#xff0c;在微前端、状态管理以及性能优化等场景下&#xff0c;合理使用缓存机制能够有效提升应用性能。本文将介绍LRU算法的基本原理&#xff0c;并通过JavaScript实现案…

三、Ollama导入大模型(.Net8+SemanticKernel+Ollama)

Ollama导入大模型 一、导入Ollama大模型1、使用run命令2、使用Modelfile方式 二、导入自定义大模型&#xff08;Ollama官网以外的大模型&#xff09;三、使用OpenWebUI导入大模型 Ollama可以导入官方提供的大模型&#xff0c;也可以导入huggingface上的自定义大模型&#xff08…

详解布隆过滤器(含面试考点)

Bloom Filter 底层逻辑主要代码实现解析&#xff08;以C为例&#xff09;优缺点应用场景面试常问问题1&#xff1a;什么是布隆过滤器&#xff1f;问题2&#xff1a;布隆过滤器如何处理误报&#xff1f;问题3&#xff1a;如何设计布隆过滤器以最小化误报率&#xff1f;问题4&…

机器学习过拟合和欠拟合!看这一篇文章就够了 建议收藏!(上篇)

在机器学习中&#xff0c;有一项非常重要的概念&#xff0c;那就是&#xff1a;过拟合&#xff08;Overfitting&#xff09;和欠拟合&#xff08;Underfitting&#xff09;。 它们涉及到机器学习中常见的两种模型性能问题&#xff0c;分别表示模型在训练数据上表现得过于复杂或…

Jetpack架构组件_2. 数据绑定库

1.理论基础 数据绑定库是一个支持库&#xff0c;可让您使用声明性格式&#xff08;而不是以程序化方式&#xff09;将布局中的界面组件绑定到应用中的数据源。 布局通常使用调用界面框架方法的代码在 activity 中定义。例如&#xff0c;以下代码会调用 findViewById() 来查找 T…

zabbix自定义监控项

文章目录 1、配置conf文件(zabbix_agent2)linuxwindows 2、配置监控项3、配置触发器4、查看监控数据 示例自定义程序 hash_tool&#xff1a;输出指定目录的哈希值 调用指令&#xff1a; hash_tool --path [指定目录] 1、配置conf文件(zabbix_agent2) linux vim /etc/zabbix/z…