在传统的开发中获取节点元素的方法主要有:
- getElementById()
- getElementsByName()
- getElementsByTagName()
- getElementsByClassName()
- querySelector()
- querySelectorAll()
document是一个对象,上面序号1~6都是它里面的一个方法
- 注意:IE8及以下的浏览器不区分属性名大小写,并且通过document.getElementById('box')也能找得到<div name="box">哈哈哈<div>元素,(我是傻了才在div里添加name属性哈哈哈)需要注意兼容性问题。
以下主要记录一下他们的一些细节问题
例一
- getElementByTagName()
- getElementByClassName()
- getElementsByName() -->用的很少,他是通过name属性获取的
以上三个获取到的元素是以类数组的形式存储,哪怕获取到的节点只有一个也是以类数组方式存储(类数组是一个对象而不是真正的数组),因为用数组的方法push会报错(看下图)。个人理解和函数传入多个实参argument差不多。 而getElementById()则不是
例二
- querySelector()
- querySelectorAll()
- 可通过的是id、class或标签获取元素,在括号内的写法与CSS选择器类似,如document.querySelector('#test')、document.querySelector('.test')\document.querySelectorAll('div')。
- 虽然HTML5才正式将他们新引入的web API规范中 但是它们很久以前就已经存在了,所以兼容性比例一的还好,能兼容到IE7。但是也有致命的缺点-->
- 缺点一:性能比前面的差,他们比前面四个查询节点慢很多,所有少有人用
- 缺点二:涉及到变化时不能用了
querySelector() 在有多个相同id、class还是标签querySelector()只获取到第一个元素
- 获取直系<p>子元素情况
对比图-->
- querySelectorAll()
- 则是把所有的都获取,并且以类数组存储,哪怕获取到的节点只有一个也是以类数组方式存储