<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
*{
padding: 0px;
margin: 0px;
}
.box{
width: 500px;
margin: 200px auto;
}
ul{
width: 392px;
padding: 5px;
list-style: none;
border: 1px solid red;
}
li:hover{
background-color: red;
}
input{
width: 400px;
}
button{
width: 70px;
}
</style>
</head>
<body>
<div class="box">
<input type="text" id="aaa"/>
<button>搜索</button>
</div>
<script>
//模拟服务器获取内容
var arr = ["a","ab","abc","abcd","aa","aaa"];
var box = document.getElementsByTagName("div")[0];
//children 返回指定元素的子元素集合
var inp = box.children[0];
//绑定事件,onkeyup事件会在键盘按键被松开时发生
inp.onkeyup = function () {
//创建一个字符串,里面添加满了li对应的内容
var newArr = [];
//需要遍历老数组
for(var i=0;i<arr.length;i++){
//判断当前项,是否以input内容为开头
var val = this.value;
// 获得文本框的值
if(arr[i].indexOf(val)===0){
//indexOf()方法可返回某个指定的字符串值在字符串中首次出现的位置
newArr.push("<li>"+arr[i]+"<li/>");
}
}
var str = newArr.join("");
//Bug1.每次创建新的ul之前,先删除旧的ul
//只有ul存在我们才能删除ul
// var aaa = box.getElementsByTagName("ul")[0];
if(box.children[2]){
//只要存在,那么就是object,object类型的数据,只要不是null,对应的boolean值都是true;
box.removeChild(box.children[2]);
}
//Bug2.如果input中内容为空,那么就不能在生成ul了。
//如果input为空,那么切断函数
//Bug3.如果arr数组中没有以input为开头的元素。那么切断函数
//newArr的长度为0,就能证明以input内容为开头的元素,在arr中不存在
if(this.value.length === 0 || newArr.length === 0){
//切断函数(不在产生新的ul)
return;
}
//3.书写事件驱动程序
var ul = document.createElement("ul");
//把创建好的内容添加到ul中。
ul.innerHTML = str;
box.appendChild(ul);
}
</script>
</body>
</html>
indexOf()方法可返回某个指定的字符串值在字符串中首次出现的位置。只有返回值为0那么字符串才是以参数开头的。如果查询不到就返回-1.
onkeyup事件会在键盘按键松开时发生.
join()方法用于把数组中的所有元素放入一个字符串。