在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1. 概述在看代码的时候发现基本上都是用 1.1 querySelector() 和 querySelectorAll() 的用法querySelector() 方法 定义: 注意: 语法: 参数值:String 必须。指定一个或多个匹配元素的 CSS 选择器。使用它们的 id, 类, 类型, 属性, 属性值等来选取元素。 querySelectorAll() 方法 定义: 提示: 可使用 NodeList 对象的 length 属性来获取匹配选择器的元素属性,然后遍历所有元素,从而获取想要的信息; 语法: 参数值:
1.2 getElement(s)Byxxxx 的用法getElementById() 方法 定义: 语法: 参数值: getElementsByTagName() 方法 定义: getElementsByClassName() 方法 定义: 2. 区别2.1 getElement(s)Byxxxx 获取的是动态集合,querySelector 获取的是静态集合动态就是选出的元素会随文档改变,静态的不会 取出来之后就和文档的改变无关了。 示例1: <body> <ul id="box"> <li class="a">测试1</li> <li class="a">测试2</li> <li class="a">测试3</li> </ul> </body> <script type="text/javascript"> //获取到ul,为了之后动态的添加li var ul = document.getElementById('box'); //获取到现有ul里面的li var list = ul.getElementsByTagName('li'); for(var i =0; i < list.length; i++){ ul.appendChild(document.createElement('li')); //动态追加li } </script> 上述代码会陷入死循环,i < list.length 这个循环条件。 示例1 修改: 将 for 循环条件修改为 i < 4,结果 在 ul 里新添加了4个元素,所有现在插入的 li 标签数量是7。 <body> <ul id="box"> <li class="a">测试1</li> <li class="a">测试2</li> <li class="a">测试3</li> </ul> </body> <script type="text/javascript"> var ul = document.getElementById('box'); var list = ul.getElementsByTagName('li'); for(var i = 0; i < 4; i++){ ul.appendChild(document.createElement('li')); } console.log('list.length:',list.length); </script>
示例2: 下述代码静态集合体现在 <body> <ul id="box"> <li class="a">测试1</li> <li class="a">测试2</li> <li class="a">测试3</li> </ul> </body> <script type="text/javascript"> var ul = document.querySelector('ul'); var list = ul.querySelectorAll('li'); for(var i = 0; i < list.length; i++){ ul.appendChild(document.createElement('li')); } console.log('list.length:',list.length); //输出的结果仍然是 3,不是此时 li 的数量 6 </script>
为什么要这样设计呢? 在 W3C 规范中对 querySelectorAll 方法有明确规定:
我们再看看在 Chrome 上面是个什么样的情况: document.querySelectorAll('a').toString(); // return "[object NodeList]" document.getElementsByTagName('a').toString(); // return "[object HTMLCollection]" HTMLCollection 在 W3C 的定义如下:
实际上, 这样说有点难理解,看看下面的例子会比较好理解: var ul = document.getElementsByTagName('ul')[0], lis1 = ul.childNodes, lis2 = ul.children; console.log(lis1.toString(), lis1.length); // "[object NodeList]" 11 console.log(lis2.toString(), lis2.length); // "[object HTMLCollection]" 4
2.2 接收的参数不同
var c1 = document.querySelectorAll('.b1 .c'); var c2 = document.getElementsByClassName('c'); var c3 = document.getElementsByClassName('b2')[0].getElementsByClassName('c'); 注意: try { var e1 = document.getElementsByClassName('1a2b3c'); var e2 = document.querySelectorAll('.1a2b3c'); } catch (e) { console.error(e.message); } console.log(e1 && e1[0].className); console.log(e2 && e2[0].className); 2.3 浏览器兼容不同
到此这篇关于JavaScript中 querySelector 与 getElementById 方法区别的文章就介绍到这了,更多相关JavaScript中 querySelector 与 getElementById 内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论