原生的强大DOM选择器querySelector
2016-12-16 00:00
471 查看
在传统的 JavaScript 开发中,查找 DOM 往往是开发人员遇到的第一个头疼的问题,原生的 JavaScript 所提供的 DOM 选择方法并不多,仅仅局限于通过 tag, name, id 等方式来查找,这显然是远远不够的,如果想要进行更为精确的选择不得不使用看起来非常繁琐的正则表达式,或者使用某个库。事实上,现在所有的浏览器厂商都提供了 querySelector 和 querySelectorAll 这两个方法的支持,甚至就连微软也派出了 IE 8 作为支持这一特性的代表,querySelector 和 querySelectorAll 作为查找 DOM 的又一途径,极大地方便了开发者,使用它们,你可以像使用 CSS 选择器一样快速地查找到你需要的节点。
querySelector 和 querySelectorAll 的使用非常的简单,就像标题说到的一样,它和 CSS 的写法完全一样,对于前端开发人员来说,这是难度几乎为零的一次学习。假如我们有一个 id 为 test 的 DIV,为了获取到这个元素,你也许会像下面这样:
现在我们来试试使用新方法来获取这个 DIV:
感觉区别不大是吧,但如果是稍微复杂点的情况,原始的方法将变得非常麻烦,这时候 querySelector 和 querySelectorAll 的优势就发挥出来了。比如接下来这个例子,我们将在 document 中选取 class 为 test 的 div 的子元素 p 的第一个子元素,当然这很拗口,但是用本文的新方法来选择这个元素,比用言语来描述它还要简单。
现在应该对于 querySelector、querySelectorAll 方法中的参数已经非常明白了,是的,它接收的参数和 CSS 选择器完全一致。querySelector 和 querySelectorAll 的区别在于 querySelector 用来获取一个元素,而querySelectorAll 可以获取多个元素。querySelector 将返回匹配到的第一个元素,如果没有匹配的元素则返回 Null。querySelectorAll 返回一个包含匹配到的元素的数组,如果没有匹配的元素则返回的数组为空。在本文最后一个例子中,我们使用 querySelectorAll 给所有 class 为 emphasis 的元素加粗显示。
这是原生方法,比起jquery速度快,缺点是IE6、7不支持。
querySelector 和 querySelectorAll 的使用非常的简单,就像标题说到的一样,它和 CSS 的写法完全一样,对于前端开发人员来说,这是难度几乎为零的一次学习。假如我们有一个 id 为 test 的 DIV,为了获取到这个元素,你也许会像下面这样:
1 | document.getElementById( "test" ); |
1 | document.querySelector( "#test" ); |
2 | document.querySelectorAll( "#test" )[0]; |
1 | document.querySelector( "div.test>p:first-child" ); |
2 | document.querySelectorAll( "div.test>p:first-child" )[0]; |
1 | var emphasisText = document.querySelectorAll( ".emphasis" ); |
2 | for ( var i = 0 , j = emphasisText.length ; i < j ; i++ ){ |
3 | emphasisText[i].style.fontWeight = "bold" ; |
4 | } |
相关文章推荐
- javaEE--request.getRequestDispatcher--URL后带参数实现自定义跳转
- Vuejs使用
- Android 常用的设计模式之Builder模式
- SoapUI中使用Type是Groovy的DataSource
- SoapUI中使用Property Transfer TestStep
- grub rescue
- 虚拟主机加密与网页重写 squit服务
- easyui calendar 月份切换事件
- Android UI 初学笔记(一)
- 225. Implement Stack using Queues**
- 通过Function Score Query优化Elasticsearch搜索结果
- 232. Implement Queue using Stacks*
- End-to-End Reinforcement Learning of Dialogue Agents for Information Access
- 两个NetSuite之间历史交易数据迁移的具体方案
- 个人记录-LeetCode 51. N-Queens
- ubuntu 下配置opencv3.10问题-Eigen/Eigenvalues: No such file or directory
- 743B. Chloe and the sequence codeforces
- ant build.xml 解释!
- serialVersionUID的作用
- java 生成8位数字作为UID