(DOM集合—类数组对象转化为数组)

1,错误:Uncaught TypeError: hdList.forEach is not a function
2,错误的原因
原生js获取的DOM集合是一个类数组对象,所以不能直接利用数组的方法(例如:forEach,map等),需要进行转换为数组后,才能用数组的方法!
3,6种解决办法(假如hdList是一个DOM集合)
(1),Array.from()方法

  1. //将hdList用Array.from()方法转换为数组,并用list变量接收
  2. let list = Array.from(hdList);

(2),用Array.prototype.slice.call(elems)方法转化为数组

  1. //hdList转化为数组并用list变量接收
  2. let list = Array.prototype.slice.call(hdList);
  3. //添加点击事件
  4. list.forEach((current,index) => {
  5. current.addEventListener('click',() => {
  6. animationFn(index);
  7. },false);
  8. });

(3),用[ …elems ]方法转化为数组

  1. let list = [...hdList];//用[ ...elems ]方法转化为数组并用list接收
  2. //添加点击事件
  3. list.forEach((current,index) => {
  4. current.addEventListener('click',() => {
  5. animationFn(index);
  6. },false);
  7. });

(4),用Array.prototype.forEach.call(elem,callback)方法

  1. //直接对hdList集合进行循环或者map等
  2. Array.prototype.forEach.callhdList,function(){
  3. //...
  4. })
  5. Array.prototype.map.callhdList,function(){
  6. //...
  7. })

(5),用Array.prototype.forEach.apply(elem,[callback])方法

  1. //添加点击事件
  2. Array.prototype.forEach.apply(hdList,[(current,index) => {
  3. current.addEventListener('click',() => {
  4. animationFn(index);
  5. },false);
  6. }]);

(6),用bind方法

  1. //添加点击事件
  2. Array.prototype.forEach.bind(hdList)((current,index) => {
  3. current.addEventListener('click',() => {
  4. animationFn(index);
  5. },false);
  6. });