7-80 HTML5新增的JS选择器

   2023-02-08 学习力0
核心提示: 学习要点HTML5新增的JS选择器 在传统的 JavaScript 开发中,原生的 JavaScript 所提供的 DOM 选择方法并不多,仅仅局限于通过 tag, name, id 等方式来查找,这显然是远远不够的,如果想要进行更为精确的选择不得不使用看起来非常繁琐的正则表达式,或者使用

 

学习要点

  • HTML5新增的JS选择器

在传统的 JavaScript 开发中,原生的 JavaScript 所提供的 DOM 选择方法并不多,仅仅局限于通过 tag, name, id 等方式来查找,这显然是远远不够的,如果想要进行更为精确的选择不得不使用看起来非常繁琐的正则表达式,或者使用某个库。
querySelector 和 querySelectorAll 方法是 W3C Selectors API 规范中定义的。他们的作用是根据 CSS 选择器规范,便捷定位文档中指定元素。 现在所有的浏览器厂商都提供了 querySelector 和 querySelectorAll 这两个方法的支持,使用它们,你可以像使用 CSS 选择器一样快速地查找到你需要的节点。

HTML5新增的JS选择器

querySelector 和 querySelectorAll 方法是 W3C Selectors API 规范中定义的。他们的作用是根据 CSS 选择器规范,便捷定位文档中指定元素。功能类似于jQuery的选择器。这使得在编写原生JavaScript代码时方便了许多。

  1. document.querySelector('selectors');

    该方法返回满足条件的单个元素。按照深度优先和先序遍历的原则使用参数提供的CSS选择器在DOM进行查找,返回第一个满足条件的元素

  2. document.querySelectorAll('selectors');

    该方法返回所有满足条件的元素,结果是个nodeList集合。查找规则与前面所述一样。

  3. 注意事项

    参数selectors 可以包含多个CSS选择器,用逗号隔开:element = document.querySelector('selector1,selector2,...');br>elementList = document.querySelectorAll('selector1,selector2,...');

    这种方法查找元素是非实时的,即不支持有动态添加元素情况下的查找

  4. document.getElementsByClassName("selector");返回文档中所有指定类名的元素集合,作为 NodeList 对象。

    IE8以下的浏览器中,无法通过Class标签getElementsByClassName函数获取元素。ie9以上及主流浏览器均支持通过Class获取元素,ie8及以下的解决办法:

    可以用jQuery代替 引用jQuery后,使用$(".ClassName")等方法获取元素。

    自己写getElementsByClassName函数方法

 

7-80 HTML5新增的JS选择器

 

 1 <!DOCTYPE html>
 2 <html lang="zh-cn">
 3 <head>
 4     <meta charset="utf-8">
 5     <title>7-79 课堂演示</title>
 6     <style type="text/css">
 7     </style>
 8 </head>
 9 <body>
10     <h3> 标题2</h3>
11     <h2> 标题1</h2>
12 
13      <div class="content"> 
14          <ul id="u1">    
15              <li>列表项1</li> 
16              <li class="ll">列表项2</li>  
17              <li class="ll">列表项3</li> 
18              <li class="ll">列表项4
19                 <p>u1里的段落</p>
20              </li>
21              <li>列表项5</li>
22          </ul>
23           
24          <ul id="u2">    
25              <li>列表项11</li>   
26              <li class="bb">列表项12</li>   
27              <li class="bb">列表项13</li>   
28              <li class="bb">列表项14</li>
29              <li>列表项15</li>
30          </ul>
31     </div>
32     <script>
33         //快捷的通过class ID 元素名称查找元素
34         function myFun1(){
35             // document.querySelector("li").style.backgroundColor = "red";
36             // document.querySelector("#u2").style.backgroundColor = "blue";
37             document.querySelector(".bb").style.backgroundColor = "blue";
38         }
39         //结合CSS3的选择器进行更精确的查找
40         function myFun2(){
41             document.querySelector("#u2>li+li").style.backgroundColor = "red";
42             document.querySelector("#u1 li p").style.backgroundColor = "red";
43         }
44         //只匹配第一个符合条件的元素
45         function myFun3(){
46             document.querySelector("h2, h3").style.backgroundColor = "red"; 
47         }
48         myFun3()
49     </script>
50 </body>
51 </html>

 

 7-80 HTML5新增的JS选择器

 

 1 <!DOCTYPE html>
 2 <html lang="zh-cn">
 3 <head>
 4     <meta charset="utf-8">
 5     <title>7-80 课堂演示</title>
 6     <style type="text/css">
 7     </style>
 8 </head>
 9 <body>
10     <h3> 标题2</h3>
11     <h2> 标题1</h2>
12 
13      <div class="content"> 
14          <ul id="u1">    
15              <li>列表项1</li> 
16              <li class="ll">列表项2</li>  
17              <li class="bb">列表项3</li> 
18              <li class="ll">列表项4
19                 <p>u1里的段落</p>
20              </li>
21              <li>列表项5</li>
22          </ul>
23           
24          <ul id="u2">    
25              <li>列表项11</li>   
26              <li class="bb">列表项12</li>   
27              <li class="bb">列表项13</li>   
28              <li class="bb">列表项14</li>
29              <li>列表项15</li>
30          </ul>
31     </div>
32     <script>
33         //快捷的通过class ID 元素名称查找元素
34         function myFun1(){
35             // document.querySelector("li").style.backgroundColor = "red";
36             // document.querySelector("#u2").style.backgroundColor = "blue";
37             document.querySelector(".bb").style.backgroundColor = "blue";
38         }
39         //结合CSS3的选择器进行更精确的查找
40         function myFun2(){
41             document.querySelector("#u2>li+li").style.backgroundColor = "red";
42             document.querySelector("#u1 li p").style.backgroundColor = "red";
43         }
44         //只匹配第一个符合条件的元素
45         function myFun3(){
46             document.querySelector("h2, h3").style.backgroundColor = "red"; 
47         }
48 
49         //querySelectorAll返回的是一个集合
50         function myFun4() {
51             var x=document.querySelectorAll("li");
52             x[3].style.backgroundColor = "green"
53             //alert(x.length)
54             for (var i = 0; i < x.length; i++) {
55                 x[i].style.backgroundColor = "red";
56                 }
57         }
58 
59         function myFun5(){
60                 var x=document.querySelectorAll("#u1 .bb")
61                  for (var i = 0; i < x.length; i++) {
62                  x[i].style.backgroundColor = "green";
63             }
64         }
65 
66         //querySelectorAll查找元素不是实时的
67         function myFun6(){
68             var u1=document.getElementById('u1')
69             // var arr=document.querySelectorAll("#u1>li")
70             var arr=u1.getElementsByTagName('li')
71             alert(arr.length)
72             var newli=document.createElement('li')
73             newli.innerHTML='newli'
74             u1.appendChild(newli)
75             alert(arr.length)
76         }
77 
78         //通过className查找元素
79         function myFun7() {
80         var x = document.getElementsByClassName("bb");
81             for (var i = 0; i < x.length; i++) {
82                 x[i].style.backgroundColor = "red";
83             }
84         }
85         myFun7()
86     </script>
87 </body>
88 </html>

 

 

浏览器兼容性

  • 版本较低的浏览器有会存在兼容性问题。
  • 很多框架中封装了解决浏览器兼容性的问题的方法,比如JQ;使用合适的框架不但可以解决兼容性还可以节省很多时间,效率更高
  • 在不用框架的情况下可以自己编写一个解决兼容性的函数,或者直接引用一个解决兼容问题的函数
  • 相信随着浏览器的更新和语言的规范这些目前的兼容性问题未来很可能就不存在了



理解全局对象Global

  • 全局属性和函数可用于所有内建的 JavaScript 对象。全局对象是所有全局方法的拥有者,用来同意管理全局方法,全局方法也就是全局函数。
    • parseInt() 函数可解析一个字符串,并返回一个整数。
    • parseFloat() 解析一个字符串并返回一个浮点数。

      注意:可以将数字开头的字符串转换成数值,但是不可以转换非数字开头的字符串

    • isNaN(x)函数用于检查其参数是否是非数字值。

      可用于判断其参数是否是 NaN,该值表示一个非法的数字(比如被 0 除后得到的结果)。

      如果 x 是特殊的非数字值 NaN(或者能被转换为这样的值),返回的值就是 true。如果 x 是其他值,则返回 false。

      isNaN() 函数通常用于检测 parseFloat() 和 parseInt() 的结果,以判断它们表示的是否是合法的数字。当然也可以用 isNaN() 函数来检测算数错误,比如用 0 作除数的情况。

    • ......



变量的作用范围

  • 作用域是指有效范围,JS变量的作用域有全局和局部之分
  • "全局变量":申明在函数之外的变量
  • "局部变量":申明在函数体中的变量,并且只能在当前函数体内访问
  • 如果函数内部有定义变量,即使在定义之前输出但会先执行后面定义语句,然后判断输出结果
  • 全局变量的优点:可以减少变量的个数,减少由于实际参数和形式参数的数据传递带来的时间消耗。

    全局变量缺点:使函数的代码可读性降低。由于多个函数都可能使用全局变量,函数执行时全局变量的值可能随时发生变化,对于程序的查错和调试都非常不利。



结束语

  • 在本套课程中详细讲解了JavaScript的基础知识,还有如下内容没有讲解道:
    • 函数的高级复杂部分
    • cookie对象与存储
    • Ajax应用
    • JS面向对象
    • JQ框架的使用
    • ......
  • 在您学习到这节课的时候,我想我们的第二套课程《HTML5进阶课程第一季---JavaScript入门到精通》《HTML5进阶课程第二季---CSS3实战技巧案例专题》也已经快要与大家见面了,在进阶课程中我们会进一步的为大家详解JS的其他知识。



 

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • HTML中将背景颜色渐变 html设置背景颜色渐变
    通过使用 css3 渐变可以让背景两个或多个指定的颜色之间显示平稳的过渡,由于用到css3所以需要考虑下浏览器兼容问题,例如:从左到右的线性渐变,且带有透明度的样式:#grad {background: -webkit-linear-gradient(left,rgba(255,0,0,0),rgba(255,0,0,1)); /*
    03-08
  • html5 Canvas 如何自适应屏幕大小
    但是这样创建出的画布不能随着浏览器窗口大小的改变而动态的改变画布的大小。而这一点往往又非常重要, 因为我们会经常改变浏览器窗口大小,不会一直保持某个固定的大小。 html代码 canvas width="300" height="300" id="myCanvas"/canvas设置样式 * {
    03-08
  • Vue中出现Do not use built-in or reserved HTML elements as component id:footer等等vue warn问题
    Vue中出现Do not use built-in or reserved HTM
    错误示图:原因:是因为在本地项目对应文件的script中,属性name出现了错误的命名方式,导致浏览器控制台报错!  诸如: name: header 、  、 name: menu , 等等都属于错误的命名方式等 错误代码命名如下:解决办法:办法1: 如果我们采用正确命名
    03-08
  • HTML在网页中插入音频视频简单的滚动效果
    HTML在网页中插入音频视频简单的滚动效果
    每次上网,打开网页后大家都会看到在网页的标签栏会有个属于他们官网的logo,现在学了HTML了,怎么不会制作这个小logo呢,其实很简单,也不需要死记硬背,每当这行代码出现的时候能知道这是什么意思就ok1 link rel="shortcuticon" type="image/x-icon" href="
    03-08
  • HTML的video标签,不能下载视频代码
    !-- 在线视频不能下载代码 --!DOCTYPE html html headscript src="../Demo/demo/book/JQuery/jQuery v2.2.0.js"/script/headbody div style="text-align:center;"video src="../images/PreviewVideo.mp4" width="820"controls="controls&
    03-08
  • ThinkPHP报错 The requested URL /admin/index/login.html was not found on this server.
    ThinkPHP报错 The requested URL /admin/index/
           解决方案在入口文件夹public下查看.htaccess是否存在。不存在则新建,存在的话,那内容替换为下面这串代码 就可以解决Not Fund#IfModule mod_rewrite.c#Options +FollowSymlinks -Multiviews#RewriteEngine On##RewriteCond %{REQUEST_FILENAME
    03-08
  • HTML特殊字符、列表、表格总结 html特殊符号对
            HTML实体字符  在HTML中一些特殊的字符需要用特殊的方式才能显示出来,比如小于号、版权等,  在课堂上老师教了我们一个有点意思的:空格,在教材上字符实体是“nbsp”通过老师  的演示我们发现不同的浏览器他所显示的效果不同,有的比
    03-08
  • 【JavaScript】使用document.write输出覆盖HTML
    您只能在 HTML 输出中使用 document.write。如果您在文档加载后使用该方法,会覆盖整个文档。分析HTML输出流是指当前数据形式是HTML格式的数据,这部分数据正在被导出、传输或显示,所以称为“流”。通俗的来说就是HTML文档的加载过程,如果遇到document.writ
    03-08
  • ASP.Net MVC 控制@Html.DisplayFor日期显示格式
    在做一個舊表的查詢頁時,遇到一個問題:字段在db里存儲的是DATETIME,但保存的值只有日期,沒有時間數據,比如2018/2/26 0:00:00,顯示出來比較難看,當然也可以做一個ViewModel,在字段上添加Attribute定義來更改名稱和顯示名稱,如下:[Display(Name = "建
    03-08
  • html 基础代码
    title淄博汉企/title/headbody bgcolor="#00CC66" topmargin="200" leftmargin="200" bottommargin="200"a name="top"/a今天br /天气nbsp;nbsp;nbsp;nbsp;nbsp;不错br /font color="#CC0000"格式控制标签br /b 文字加粗方式1\bbr /str
    03-08
点击排行