[英]How can i make my variable defined?
//我不断收到typeError a,但未定义。 但是我试图在代码之上声明我的变量,但是它仍然不起作用。
// Get input element
let filter = document.getElementById('filter');
// Add event listener
filter.addEventListener('keyup', filterNames);
function filterNames() {
// Get value of input
let filterValue = document.getElementById('filter').value.toUpperCase();
// Get names ul
let ul = document.getElementById('names');
// Get lis from ul
let li = ul.querySelectorAll('li.list-group-item');
// Loop through collection-item lis
for (let i = 0; i < li.length; i++) {
let a = li[i].getElementsByTagName('a')[0];
// If matched
if (a.innerHTML.toUpperCase().indexOf(filterValue) > -1) {
li[i].style.display = '';
} else {
li[i].style.display = 'none';
}
}
}
根据您的问题,我尝试复制相同的内容
HTML
<input type="text" id="filter" />
<ul id="names" class="list-group">
<li class="list-group-item"><a>First item</a></li>
<li class="list-group-item"><a>Second item</a></li>
<li class="list-group-item"><a>Third item</a></li>
</ul>
JS:
// Get input element
let filter = document.getElementById('filter');
// Add event listener
filter.addEventListener('keyup', filterNames);
function filterNames() {
// Get value of input
let filterValue = document.getElementById('filter').value.toUpperCase();
// Get names ul
let ul = document.getElementById('names');
// Get lis from ul
let li = ul.querySelectorAll('li.list-group-item');
// Loop through collection-item lis
for (let i = 0; i < li.length; i++) {
let a = li[i].getElementsByTagName('a')[0];
// If matched
if (a.innerHTML.toUpperCase().indexOf(filterValue) > -1) {
li[i].style.display = '';
} else {
li[i].style.display = 'none';
}
}
}
如果在这一行没有抛出错误
let a = li[i].getElementsByTagName('a')[0];
因为没有
最可能的原因是因为每个li
内都没有a
,并且let a = li[i].getElementsByTagName('a')[0];
你会变得undefined
。 因此,您最好添加支票以进一步处理,例如
for (let i = 0; i < li.length; i++) {
let a = li[i].getElementsByTagName('a')[0];
// If matched
if (a && a.innerHTML.toUpperCase().indexOf(filterValue) > -1) {
li[i].style.display = '';
} else {
li[i].style.display = 'none';
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.