querySelectorAll和getElementsBy \*方法返回什么?

JavaScript

十三

2020-05-25

DO getElementsByClassName(等类似的功能getElementsByTagNamequerySelectorAll)的工作一样getElementById,还是他们返回元素的数组?

我问的原因是因为我试图使用更改所有元素的样式getElementsByClassName见下文。

//doesn't work
document.getElementsByClassName('myElement').style.size = '100px';

//works
document.getElementById('myIdElement').style.size = '100px';

第4161篇《querySelectorAll和getElementsBy \*方法返回什么?》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

2个回答
JinJin 2020.05.25

它返回类似数组的列表。

您以一个数组为例

var el = getElementsByClassName("elem");
el = Array.prototype.slice.call(el); //this line
el[0].appendChild(otherElem);  
MonsterKK若合 2020.05.25

换一种说法

  • document.querySelector()仅选择指定选择器的第一个元素。因此它不会吐出一个数组,而是一个值。类似于document.getElementById()仅获取ID元素,因为ID必须是唯一的。

  • document.querySelectorAll()使用指定的选择器选择所有元素,然后将它们返回到数组中。document.getElementsByClassName()适用于类和document.getElementsByTagName()标签相似


为什么要使用querySelector?

它仅用于轻松和简洁的目的。


为什么要使用getElement / sBy?*

性能更快。


为什么会有这种性能差异?

两种选择的目的都是为了创建NodeList以便进一步使用。 querySelectors使用选择器生成一个静态NodeList,因此必须首先从头开始创建它。
getElement / sBy *立即适应当前DOM的现有活动NodeList。

因此,何时使用哪种方法取决于您/您的项目/您的设备。


资讯

所有方法的演示
NodeList文档
性能测试

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android