原文地址:http://www.lovejavascript.com/#!zone/blog/content.html?id=11
Html5中有个querySelector方法,用于根据css选择符选择,看上去与jquery 的 Sizzle功能相似,写了个demo进行了一些验证。
有这么一段html
<div class="test1" id="id1">test1</div> <p class="test2">test2</p> <div class="test2">test2</div> <p test3>test3</p> <p style="display:none;">test4</p>
接下来我们开始使用jquery的使用习惯进行测试
1、通过id来获取:
var id1 = document.querySelector('#id1'); console.log(id1); //<div class="test1" id="id1">test1</div>
获取到了id=id1的node element,等同于jquery的 $('#id1').get(0)
2、通过标签名称获取:
var div = document.querySelector('div'); console.log(div);//<div class="test1" id="id1">test1</div>
获取到了标签为div的元素,等同于jquery的$('div').get(0)
3、通过className获取:
var test2 = document.querySelector('.test2'); console.log(test2); //<p class="test2">test2</p>
获取到了className=test2的元素,等同于jquery的$('.test2').get(0)
4、通过自定义属性进行获取:
var test3 = document.querySelector('[test3]'); console.log(test3); //p
获取到了包含自定义属性test3的node element,等同于$('[test3]')
到这里,发现querySelector()只会获取到第一个匹配的元素,这一点上与jquery sizzle 有所不同。这一点从习惯上是不大能接受的。查看文档发现HTML5在推出querySelector()的同时还一并推出了querySelectorAll()方法。该方法与querySelector()方法所接收的参数相同,不同的是该方法会返回所有相匹配的元素。
下面来试一下querySelectorAll()
1、获取所有DIV标签元素:
var allDiv = document.querySelectorAll('div'); console.log(allDiv); // [div#id1.test1, div.test2]
通过querySelectorAll()获取到的元素为组数类型,每一个值对应一个node element。那么该如何获取其中的某个节点?
2、获取DIV标签的第二个节点:
var secondDiv = document.querySelectorAll('div').item(1); console.log(secondDiv); //<div class="test2">test2</div>
使用item()方法,传入对应的索引值即可获得。除过这样还可以使用方括号进行获取,等同于jquery的get()方法。原生的方法可以如此支持,那兼容性如何?
兼容性问题:
现以全面支持IE8+,FireFox3.5+,Safari3.1+,Chrome和Op10+
IE8都支持了,是不是jquery的Sizzle 要完全要被替代了?我们来试几个复杂的CSS选择器。
1、div:first-child:
var firstDiv = document.querySelector('div:first-child'); console.log(firstDiv) //div#id1.test1
这个没问题,再来一个
2、div:last-child:
var lastDiv = document.querySelector('div:last-child'); console.log(lastDiv) //null
返回为null,表明该选择器不能找到对应的节点,再试一个。
3、p:hidden:
var displayNone =document.querySelector('p:hidden'); console.log(displayNone); // null
依旧返回null,表明p:hidden这种形式的也不支持。
由此可见,querySelector并不能完全替代jquery Sizzle的,jquery sizzle所表现的实力依旧明显。当然原生的方法性能上要优于jquery,查看了下源码,发现从1.7.2版本开始(在之前的没有去找,有在再早之前发现的可以联系下我)。现贴出的为2.1.4系列中jquery Sizzle中对querySelectorAll方法的处理。
#jquery.2.1.4.js 1119行 function( tag, context ) { if ( typeof context.getElementsByTagName !== "undefined" ) { return context.getElementsByTagName( tag ); // DocumentFragment nodes don't have gEBTN } else if ( support.qsa ) { return context.querySelectorAll( tag ); } }
由源码中可以看出,jquery中很早就对querySelector进行使用。所以如果项目中有引用的jquery,则无需使用querySelector与querySelectAll。
jquery经典绝非偶然
相关推荐
【querySelector和querySelectorAll详解】 在JavaScript的DOM操作中,querySelector和querySelectorAll是两个非常重要的方法,它们极大地简化了对HTML元素的查找。这两个方法的引入,使得开发者可以如同使用CSS选择...
原生的强大 DOM 选择器 querySelector 介绍 DOM 选择器 querySelector 是一种原生的 JavaScript 方法,用于快速查找和选择 DOM 元素。它的出现解决了传统 JavaScript 开发中查找 DOM 的问题,使得开发者可以快速地...
`querySelector` 和 `querySelectorAll` 是JavaScript中用于DOM操作的两个强大方法,它们允许开发者使用CSS选择器的方式来选取DOM元素,极大地提高了代码的可读性和效率。这两个方法在现代浏览器中得到了广泛支持,...
`querySelector()` 是JavaScript中用于选择DOM元素的强大方法,它基于CSS选择器来定位页面上的特定元素。这个方法在处理单个元素时非常有用,因为`querySelector()`只会返回匹配选择器的第一个元素,而不是像`...
querySelector 但用于父节点。 给定一个节点,选择与给定选择器匹配的父/祖先。 安装 $ npm install --save select-parent 用法 var selectParent = require ( 'select-parent' ) var redDiv = selectParent ( 'div...
`document.querySelector`是用于选取DOM树中匹配指定CSS选择器的第一个元素。如果选择器匹配到多个元素,它只会返回第一个。例如,以下代码将选取id为`container`的首个`div`元素: ```javascript element = ...
在Web开发中,JavaScript为操作DOM(文档对象模型)提供了许多API,其中包括querySelector和querySelectorAll这两个方法。这两个方法为开发者提供了查询DOM元素的能力,类似于jQuery所提供的选择器功能,但它们是...
其中,`querySelector` 和 `querySelectorAll` 是两个非常重要的方法,它们提供了比传统方法如 `getElementById` 和 `getElementsByClassName` 更强大和灵活的查询能力。这两个方法是 W3CSelectors API 规范中定义的...
queryselector完成vscode扩展 使用Vanilla js和Web组件开发Web应用程序时,通常需要使用querySelector从导入的模板中选择元素。 此扩展为选择器提供自动补全功能,并提供代码操作来定义相应的类属性。 产品特点 ...
`querySelector` 方法返回文档中第一个匹配指定CSS选择器的元素。如果没有任何元素匹配该选择器,它将返回`null`。这个方法的效率相对较高,因为它只需要找到第一个匹配项即可停止搜索。例如: ```javascript var ...
在JavaScript中,获取页面元素有多种方法,其中最为常见的两种是通过`document.getElementById`和`document.querySelector`。这两个方法虽然都可以用于根据元素的ID来获取页面上的元素,但它们之间存在一些关键的...
querySelector可以刺穿Shadow DOM根,而无需知道通过嵌套Shadow根的路径。 可用于自动测试Web组件,例如使用Selenium,Puppeteer。 // available as an ES6 module for importing in Browser environments import {...
`querySelector` 和 `querySelectorAll` 是JavaScript中用于选取DOM元素的两个强大方法,它们都是在DOM元素或文档对象上可用的。这两个API在现代浏览器中得到了广泛支持,为开发者提供了便利的选择器操作。 首先,`...
可以使用`document.getElementById()`、`document.querySelector()`或`document.getElementsByTagName()`等方法。例如,如果表格的ID是"myTable",则可以这样写: ```javascript var table = document....
const tableBody = e.target.querySelector('.el-table__body-wrapper'); if (!tableBody || !this.hasMore || this.loading) return; if (tableBody.scrollTop + tableBody.clientHeight >= tableBody....