JavaScript中document.querySelector与querySelectorAll详解

作者:函数茶馆时间:2026-10-31 10:50:09浏览:542

本文详解JavaScript中document.querySelector和querySelectorAll方法的使用。前者返回匹配选择器的首个元素,后者返回所有匹配元素的NodeList集合。文章通过代码示例对比两者在获取元素、绑定事件及处理静态节点列表时的差异,并介绍通过bind复用方法的技巧,帮助开发者高效进行DOM查询。

在JavaScript中,获取页面元素主要有三种常用方式。

1 document.getElementById("");
2 document.getElementsByClassName();
3 document.getElementsByTagName();

var doc=document;
var box=doc.getElementById("box");
var li=box.getElementsByTagName("li");
var surfaces=box.getElementsByClassName("surfaces");

需要注意的是,querySelector()可以直接为返回的元素绑定点击事件,而querySelectorAll()返回的是节点集合,不能直接在其上添加点击事件。

关于querySelector()的具体用法。

var node = document.querySelector(“#lover”); 
// 获取文档中的第一个id=lover的元素
var node = document.querySelector(“.lover”); 
// 获取文档中的第一个class=“lover"的元素
var node = document.querySelector(“p.lover”); 
// 获取class=“lover” 的第一个p元素
var node = document.querySelector(“a[target]”);
// 获取第一个带target属性的a元素
var element = document.querySelector(‘.foo,.bar');
//返回带有foo或者bar样式类的首个元素
document.querySelector(“body”).style=”"; 
// 移除style属性
document.querySelector(“h2,h3”).style.backgroundColor = “blue”;
//为文档的第一个h2元素添加背景颜色,但是,如果文档中

当选择器位于元素之前时,匹配到的元素会应用指定的样式,例如背景颜色。在多元素选择场景下,该方法仅返回最先匹配到的那个元素。

关于querySelectorAll。

elementList = document.querySelectorAll(selectors);

返回的elementList是一个静态的NodeList类型对象。

其中的selectors参数是由逗号分隔的一个或多个CSS选择器组成的字符串。

以下示例查找文档中包含“target”属性的标签,并为其设置边框样式。

var x = document.querySelectorAll("a[target]");
var i;
for (i = 0; i < x.length; i++) {
x[i].style.border = "10px solid red";
}

-------------------------------------------
let t0 = window.performance.now();
let li = document.querySelectorAll('li');
console.log("li 的数量", li.length);
for (let i = 0; i < li.length; i++) {
    li[i].textContent = i;
}
let t1 = window.performance.now();
console.log("耗时" + (t1 - t0) + "毫秒");

当页面中存在多个相同class标签或多个相同标签(如多个div)时,若需获取所有匹配元素,应使用querySelectorAll()方法替代。

该方法返回所有满足条件的元素,结果为一个NodeList集合。其查找规则与前述一致,querySelectorAll返回的是一个伪数组形式的DOM集合。

ParentNode.querySelectorAll()的结果是NodeList数组,但它并非标准的JavaScript数组(Array),因此无法直接调用Array的原型方法。

<div id="box">

<ul>
<li data-href='http://www.qq.com'>tagname 111</li>
<li class="surfaces">这是clase? 222</li>
<li class="surfaces">这是class333</li>
<li class="surfaces" data-href='http://www.baidu.com'>这是class444</li>
</ul>

</div>
<br>

document.getElementById("box").addEventListener("click", function(){
var attr=document.querySelectorAll('[data-href]');
console.log(attr);
},!1);
<input type="checkbox" name="gender" value="male" checked>
<input type="checkbox" name="gender" value="female">

<div lang="en"><q>This English quote has a <q>nested</q> quote inside.</q></div>
<div lang="fr"><q>This French quote has a <q>nested</q> quote inside.</q></div>
<div lang="de"><q>This German quote has a <q>nested</q> quote inside.</q></div>

<input type="text" placeholder="我是占位符">
<input type="text" placeholder="我是占位符" value="我的 value 遮盖了占位符">

let target = document.querySelector('input[type="checkbox"]:checked');
console.log('使用 querySelector 查找 ', target)

let fr = document.querySelector('div:lang(fr)');
console.log('使用 querySelector 查找 ', fr);

let pl = document.querySelector('input:placeholder-shown');
console.log('使用 querySelector 查找 ', pl);

关于document.querySelector.bind和document.querySelectorAll.bind的使用。

<div id="box">
<ul>
<li >tagname 111</li>
<li class="surfaces">这是clase 222</li>
<li class="surfaces">这是class333</li>
<li class="surfaces">这是class444</li>
</ul>
</div>

--------------------------------------------------------------------------

var query_id=query('#box'); //dom id 
var query_class=query('.surfaces'); // dom class 
var query_tagname=query('li') //dom 标签

console.log('query'+query_id.innerHTML); //

console.log('query'+query_class.innerHTML); 第一个222

console.log('query'+query_tagname.innerHTML); 第一个222

--------------------------------------------------------------------------

1 var query = document.querySelector.bind(document); //单个的
var query_id=query('#box'); //dom id
var query_class=query('.surfaces'); // dom class
var query_tagname=query('li') //dom 标签
query_id.addEventListener('click',function(){
console.log('click_query_id'+this.innerHTML);   //click surfaces 2222
});

query_class.addEventListener('click',function(){
var e=e||window.event;
console.log('click_query_class'+this.innerHTML); //click surfaces 2222
e.stopPropagation();
});

query_tagname.addEventListener('click', function(e){
var e=e||window.event;
console.log('click_query_tagname' + this.innerHTML); //click surfaces 2222
e.stopPropagation();
});

总结。

至此,关于js中document.querySelector()方法的文章介绍完毕,更多相关js中document.querySelector()方法内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

作者最新文章