在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 關(guān)于ES5中的document.getElementsByTagName

關(guān)于ES5中的document.getElementsByTagName

題目描述

面試官問我,循環(huán)遍歷document.getElementsByTagName('div')的所有div的方法
我說用for循環(huán),他說不是,請問到底是怎么回事,我現(xiàn)在很蒙圈啊

題目來源及自己的思路

相關(guān)代碼

// 請把代碼文本粘貼到下方(請勿用圖片代替代碼)

你期待的結(jié)果是什么?實(shí)際看到的錯(cuò)誤信息又是什么?

回答
編輯回答
熟稔

for循環(huán)是可以的。

var nodeList = document.getElementsByTagName('div'); 
for (var i = 0; i < nodeList.length; i++) {
    // code here
    console.log(1);
}

面試官可能更希望你回答出,這是array-like-object 類數(shù)組對象,怎么轉(zhuǎn)換成數(shù)組。再做循環(huán)。

方案一:ES5 Array.prototype.slice.call

var nodeList = document.getElementsByTagName('div'));
var nodeArr = Array.prototype.slice.call(nodeList);
// [].slice.call() 這個(gè)也可以
Array.isArray(nodeArr); // true
nodeArr.forEach(() => {
    console.log(1);
});

方案二:ES6 擴(kuò)展符 ...

// NodeList對象
var nodeArr = [...document.querySelectorAll('div')];
nodeArr.forEach(() => {
    console.log(1);
});

方案三:ES6 Array.from

Array.from(document.querySelectorAll('div')).forEach(() => {
    // code here
    console.log(1);
});

面試官應(yīng)該是想要你說出轉(zhuǎn)成數(shù)組這三種方案。希望對你有幫助~

2017年6月23日 20:51
編輯回答
獨(dú)白

for 循環(huán)是絕對可以的,估計(jì)并不是面試官所期待的吧。

因?yàn)?document.getElementsByTagName('div') 得到的是類數(shù)組對象,并不是真正的數(shù)組,

可能是希望你將類數(shù)組對象轉(zhuǎn)換成數(shù)組對象,然后用數(shù)組的map forEach等方法吧

2017年7月24日 15:47
編輯回答
故林

MDN上也是用for循環(huán)遍歷的,有什么不妥嗎?MDN

2018年4月3日 06:59
編輯回答
魚梓

調(diào)用getElementsByTagName , document.childNodes 之類的方法,它們返回NodeList對象都屬于偽數(shù)組。不能應(yīng)用 Array下的 循環(huán)、push 等方法。先轉(zhuǎn)成數(shù)組再處理:

var domNodes = Array.prototype.slice.call(document.getElementsByTagName("div"));
domNodes.forEach(function(){
  //.....
})
2017年7月21日 14:32