querySelectorAll和getElementsBy *方法返回什么?

十三 · 05月25日

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

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

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

//works
document.getElementById('myIdElement').style.size = '100px';
回答(2)
时间
J
JinJin
2 · 2020-05-25 12:02:22

它返回类似数组的列表。

您以一个数组为例

var el = getElementsByClassName("elem");
el = Array.prototype.slice.call(el); //this line
el[0].appendChild(otherElem);  
M
MonsterKK若合
1 · 2020-05-25 12:02:22

换一种说法

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

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


为什么要使用querySelector?

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


为什么要使用getElement / sBy?*

性能更快。


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

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

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


资讯

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

你的回答

加载中...
⌘+Return 发表
发表

温馨提示:登录后可发表评论或回复

关闭,朕知道了

扫码关注微信公众号或小程序