HTMLcollection 长度为零。无法将其转换为数组。 Handlebars.js
HTMLcollection length is zero. Can't convert it to array. Handlebars.js
我用车把模板替换了 html 文件中的内容。现在,我有了这个 js 代码
function init() {
var elements = document.getElementsByTagName('li');
console.log("before click");
console.log(elements);
pullData();
var arr = [].slice.call(elements);
console.log(arr);
for (var i = 0; i < arr.length; i++) {
console.log("before click");
arr[i].addEventListener("click", function() {
console.log("after click");
for (var j = 0; j < arr.length; j++) {
arr[j].classList.remove('selected', 'no-hover');
}
var contentList = document.querySelectorAll('.show');
console.log(contentList);
for (var k = 0; k < contentList.length; k++) {
contentList[k].classList.remove('show');
}
document.getElementById('right').style.display = 'block';
var id = this.id;
console.log(id);
var targetElements = document.querySelectorAll('.' + id);
console.log(targetElements);
for (var x = 0; x < targetElements.length; x++) {
targetElements[x].classList.add('show');
}
this.classList.add('selected', 'no-hover');
});
}
}
在使用 handelbars 模板之前它工作正常,因为它返回一个节点列表,我能够遍历元素并向每个元素附加点击。
使用 handlebars 后,我的 elements
是一个 HTML 集合,我尝试将其转换为数组,但我得到的是一个空数组。
我有以下问题。车把是否导致了这种变化?(返回 HTMLcollection 而不是节点列表)或者,我只是连接了两个独立的东西吗?
为什么我得到一个空数组?
所以,我在一点帮助下解决了这个问题。
我得到一个空数组的原因是因为我的 JS 代码试图在 handlebars 完成模板构建之前转换 HTML 集合。
我通过显示结果为零的 HTML 集合的长度来检查这一点。
所有,我必须做的是解决这个问题,以确保在 handlebars 模板完成其过程后将集合转换为数组。
我用车把模板替换了 html 文件中的内容。现在,我有了这个 js 代码
function init() {
var elements = document.getElementsByTagName('li');
console.log("before click");
console.log(elements);
pullData();
var arr = [].slice.call(elements);
console.log(arr);
for (var i = 0; i < arr.length; i++) {
console.log("before click");
arr[i].addEventListener("click", function() {
console.log("after click");
for (var j = 0; j < arr.length; j++) {
arr[j].classList.remove('selected', 'no-hover');
}
var contentList = document.querySelectorAll('.show');
console.log(contentList);
for (var k = 0; k < contentList.length; k++) {
contentList[k].classList.remove('show');
}
document.getElementById('right').style.display = 'block';
var id = this.id;
console.log(id);
var targetElements = document.querySelectorAll('.' + id);
console.log(targetElements);
for (var x = 0; x < targetElements.length; x++) {
targetElements[x].classList.add('show');
}
this.classList.add('selected', 'no-hover');
});
}
}
在使用 handelbars 模板之前它工作正常,因为它返回一个节点列表,我能够遍历元素并向每个元素附加点击。
使用 handlebars 后,我的 elements
是一个 HTML 集合,我尝试将其转换为数组,但我得到的是一个空数组。
我有以下问题。车把是否导致了这种变化?(返回 HTMLcollection 而不是节点列表)或者,我只是连接了两个独立的东西吗?
为什么我得到一个空数组?
所以,我在一点帮助下解决了这个问题。
我得到一个空数组的原因是因为我的 JS 代码试图在 handlebars 完成模板构建之前转换 HTML 集合。
我通过显示结果为零的 HTML 集合的长度来检查这一点。
所有,我必须做的是解决这个问题,以确保在 handlebars 模板完成其过程后将集合转换为数组。