InnerHTML 属性 附加而不是替换数据
InnerHTML Property Appending Instead of Replacing Data
我正在尝试创建一个实时匹配数据显示器。 (即,我有一个数据数组,当用户在文本框中输入一个字符串时,将显示数组中匹配的字符串)。
但是这里出现了一个小问题,当我尝试显示新的 matched-data 时,旧数据也附加了结果。
for eg,
assume that the array is => ['abcd','aaa','bcd','aabb']
我)。首先我输入了字母'a'
那么输出将是
- abcd
- aaa
- aabb
二)。然后我再添加一个字母 'aa'
预期输出:
- aaa
- aabb
返回的输出 按程序:
- abcd
- aaa
- aabb
- aaa
- aabb
这是代码
var elemContainer = ['abcd','aaa','bcd','aabb'];
var matchedItems = [];
var result = '';
function showSearchData(){
document.getElementById('search').addEventListener('keyup',function(){
/*console.log(this.value);*/
var data = this.value;
for(let i=0;i < elemContainer.length; i++){
if(elemContainer[i].includes(data)){
matchedItems.push(elemContainer[i]);
}
}
result = '';
console.log(result);
displayMatchedData();
});
}
function displayMatchedData(){
/*result = '';*/
document.getElementById('matched-items-container').innerHTML = '';
for(let i=0;i<= matchedItems.length;i++){
result += '<li>'+matchedItems[i]+'</li>';
}
document.getElementById('matched-items-container').innerHTML = result;
}
showSearchData();
<input type="text" id="search" />
<ul id="matched-items-container"></ul>
到目前为止我尝试了什么
I. 每当 keyup
事件发生时,每次重置结果变量。
二。每次调用 display() 时将 element.innerHTML
设置为 NULL。
您忘记清除 matchedItems
数组。
var elemContainer = ['abcd','aaa','bcd','aabb'];
var matchedItems = [];
var result = '';
function showSearchData(){
document.getElementById('search').addEventListener('keyup',function(){
/*console.log(this.value);*/
var data = this.value;
// here, clear the matched items array
matchedItems = [];
for(let i=0;i < elemContainer.length; i++){
if(elemContainer[i].includes(data)){
matchedItems.push(elemContainer[i]);
}
}
result = '';
console.log(result);
displayMatchedData();
});
}
function displayMatchedData(){
/*result = '';*/
document.getElementById('matched-items-container').innerHTML = '';
for(let i=0;i<= matchedItems.length;i++){
result += '<li>'+matchedItems[i]+'</li>';
}
document.getElementById('matched-items-container').innerHTML = result;
}
showSearchData();
<input type="text" id="search" />
<ul id="matched-items-container"></ul>
只需在每个 keyup
操作中清除您的 matchedItems
数组,您的计数器也从 0 开始,所以这一行 for(let i=0; i<= matchedItems.length; i++)
必须没有 =
否则它会给你undefined
var elemContainer = ['abcd','aaa','bcd','aabb'];
var matchedItems = [];
var result = '';
function showSearchData(){
document.getElementById('search').addEventListener('keyup',function(){
matchedItems = [];
var data = this.value;
for(let i=0;i < elemContainer.length; i++){
if(elemContainer[i].includes(data)){
matchedItems.push(elemContainer[i]);
}
}
result = '';
console.log(result);
displayMatchedData();
});
}
function displayMatchedData(){
/*result = '';*/
document.getElementById('matched-items-container').innerHTML = '';
for(let i=0;i< matchedItems.length;i++){
result += '<li>'+matchedItems[i]+'</li>';
}
document.getElementById('matched-items-container').innerHTML = result;
}
showSearchData();
<input type="text" id="search" autocomplete="off" />
<ul id="matched-items-container"></ul>
我正在尝试创建一个实时匹配数据显示器。 (即,我有一个数据数组,当用户在文本框中输入一个字符串时,将显示数组中匹配的字符串)。
但是这里出现了一个小问题,当我尝试显示新的 matched-data 时,旧数据也附加了结果。
for eg, assume that the array is => ['abcd','aaa','bcd','aabb']
我)。首先我输入了字母'a'
那么输出将是
- abcd
- aaa
- aabb
二)。然后我再添加一个字母 'aa'
预期输出:
- aaa
- aabb
返回的输出 按程序:
- abcd
- aaa
- aabb
- aaa
- aabb
这是代码
var elemContainer = ['abcd','aaa','bcd','aabb'];
var matchedItems = [];
var result = '';
function showSearchData(){
document.getElementById('search').addEventListener('keyup',function(){
/*console.log(this.value);*/
var data = this.value;
for(let i=0;i < elemContainer.length; i++){
if(elemContainer[i].includes(data)){
matchedItems.push(elemContainer[i]);
}
}
result = '';
console.log(result);
displayMatchedData();
});
}
function displayMatchedData(){
/*result = '';*/
document.getElementById('matched-items-container').innerHTML = '';
for(let i=0;i<= matchedItems.length;i++){
result += '<li>'+matchedItems[i]+'</li>';
}
document.getElementById('matched-items-container').innerHTML = result;
}
showSearchData();
<input type="text" id="search" />
<ul id="matched-items-container"></ul>
到目前为止我尝试了什么
I. 每当 keyup
事件发生时,每次重置结果变量。
二。每次调用 display() 时将 element.innerHTML
设置为 NULL。
您忘记清除 matchedItems
数组。
var elemContainer = ['abcd','aaa','bcd','aabb'];
var matchedItems = [];
var result = '';
function showSearchData(){
document.getElementById('search').addEventListener('keyup',function(){
/*console.log(this.value);*/
var data = this.value;
// here, clear the matched items array
matchedItems = [];
for(let i=0;i < elemContainer.length; i++){
if(elemContainer[i].includes(data)){
matchedItems.push(elemContainer[i]);
}
}
result = '';
console.log(result);
displayMatchedData();
});
}
function displayMatchedData(){
/*result = '';*/
document.getElementById('matched-items-container').innerHTML = '';
for(let i=0;i<= matchedItems.length;i++){
result += '<li>'+matchedItems[i]+'</li>';
}
document.getElementById('matched-items-container').innerHTML = result;
}
showSearchData();
<input type="text" id="search" />
<ul id="matched-items-container"></ul>
只需在每个 keyup
操作中清除您的 matchedItems
数组,您的计数器也从 0 开始,所以这一行 for(let i=0; i<= matchedItems.length; i++)
必须没有 =
否则它会给你undefined
var elemContainer = ['abcd','aaa','bcd','aabb'];
var matchedItems = [];
var result = '';
function showSearchData(){
document.getElementById('search').addEventListener('keyup',function(){
matchedItems = [];
var data = this.value;
for(let i=0;i < elemContainer.length; i++){
if(elemContainer[i].includes(data)){
matchedItems.push(elemContainer[i]);
}
}
result = '';
console.log(result);
displayMatchedData();
});
}
function displayMatchedData(){
/*result = '';*/
document.getElementById('matched-items-container').innerHTML = '';
for(let i=0;i< matchedItems.length;i++){
result += '<li>'+matchedItems[i]+'</li>';
}
document.getElementById('matched-items-container').innerHTML = result;
}
showSearchData();
<input type="text" id="search" autocomplete="off" />
<ul id="matched-items-container"></ul>