编写一个具有搜索功能的搜索框

搜索框功能

能够输入国家名称全部或部分,出现搜索框的提示下拉框。

具体的数据没有放在数据库中,用JavaScript写了一个数组,从这个数组中的国家名称中找就可以了

 

实现过程

首先先编写一个HTML页面,在页面中将input的搜索框编写好,先不用css进行修饰

然后使用css进行修饰

在编写JavaScript时,我使用原生的JavaScript

先给定所有的国家数据

var arr = ["中国","日本","美国","俄罗斯","加拿大","英国","澳大利亚","西班牙","德国","孟买加","阿拉伯","印度","印度尼西亚"];

 然后在获取input输入框的输入内容

var search = document.getElementsByClassName("blue-input")[0];
text内容 = search.value

我需要实时对输入框中内容进行查询,一旦我输入内容不同,提示框中的内容也立刻改变

所以我使用DOM中的oninput事件

  • oninput 事件在用户输入时触发。

该事件在 <input> 或 <textarea> 元素的值发生改变时触发。

提示: 该事件类似于onchange事件。不同之处在于 oninput 事件在元素值发生变化是立即触发, onchange 在元素失去焦点时触发。另外一点不同是 onchange 事件也可以作用于 <keygen> 和 <select> 元素。

然后再焦点在input搜索框中时有下拉列表ul,否则没有,所以我使用onfocus和onblur

  • onblur 事件会在对象失去焦点时发生。

Onblur 经常用于Javascript验证代码,一般用于表单输入框。

  • onfocus 事件在对象获得焦点时发生。

Onfocus 通常用于 <input>, <select>, 和<a>.

 

对数据进行匹配时使用模糊查询

function searchByIndexOf(keyWord, list){
    if(!(list instanceof Array)){
        return ;
    }
    if(keyWord == ""){
    	return [];
    }else{
    	var len = list.length;
	    var arr = [];
	    for(var i=0;i<len;i++){
	        //如果字符串中不包含目标字符会返回-1
	        if(list[i].indexOf(keyWord)>=0){
	            arr.push(list[i]);
	        }
	    }
	    return arr;
    }
    
}

 

具体代码

HTML代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<link rel="stylesheet" href="css/common.css" />		
	</head>
	<body>
		<div id="container" class="center-justify">
			<div class="sea-container">
				<form action="">
					<input type="text" name="search" class="blue-input" >
					
					<input type="submit" value="搜索" class="blue-button">
				</form>
				<p id="selectedId"></p>
			</div>
		</div>
		<script src="js/sreach.js" type="text/javascript" charset="utf-8"></script>
	</body>
</html>

CSS代码

/*------------------------公共样式表----------------------------*/
* {
	margin: 0px;
	padding: 0px;
	border: 0px;
}
a {
    text-decoration: none;
}
.center-all {
    display: flex;
    justify-content: center;
    align-items: center;
}
.center-align {
    display: flex;
    align-items: center;
}
.center-justify {
    display: flex;
    justify-content: center;
}
.center-spacearound {
    display: flex;
    align-items: center;
    justify-content: space-around;
}

/*------------------------本项目公共样式----------------------------*/
#container {
    width: 800px;
    height: 400px;
    margin: 0 auto;
    padding-top: 30px;
    box-sizing: border-box;
    /*background-color: yellow;*/
}

/*搜索栏*/
.sea-container {
    width: 450px;
    height: 30px;
    background-color: green;
    margin: 100px auto;
    border: 1px solid #317EF3;
}
.blue-input {
    float: left;
    width: 350px;
    height: 30px;
    padding: 0 10px;
    box-sizing: border-box;
}
.blue-button {
    width: 100px;
    height: 30px;
    background-color: #317EF3;
    color: white;
    font-size: 15px;
}

/* 搜索下拉框*/
ul#drop {
    list-style: none;
    margin: 0;
    padding: 0;
}
ul#drop li {
    margin: 0;
    padding: 10px;
}
 
ul#drop li:hover {
    background-color: darkgrey;
	width:200px;
}
 
p#selectedId {
    display: inline-block;
}

JavaScript代码

var arr = ["中国","日本","美国","俄罗斯","加拿大","英国","澳大利亚","西班牙","德国","孟买加","阿拉伯","印度","印度尼西亚"];
var search = document.getElementsByClassName("blue-input")[0];
var selectedId = document.getElementById("selectedId")

function showList(){
	var res = searchByIndexOf(search.value,arr);
	for(var i=0;i<res.length;i++){
		var li = document.createElement("li");
		li.innerHTML = res[i];
		document.getElementById("drop").appendChild(li);
	}
}

search.oninput = function getMoreContents() {	

	//删除ul
	var drop = document.getElementById("drop");
	selectedId.removeChild(drop);
	//把ul添加回来
	var originalUl = document.createElement("ul");
    originalUl.id = "drop";
    selectedId.appendChild(originalUl);
	
	showList();
}

// 添加获取焦点事件
search.onfocus = function(){
    	// 初始下拉列表
        var originalUl = document.createElement("ul");
        originalUl.id = "drop";
        selectedId.appendChild(originalUl);
	showList();
}

//添加失去焦点事件
search.onblur = function(){
//	console.log("soutsout")
	var drop = document.getElementById("drop");
	selectedId.removeChild(drop);
}



//模糊查询:利用字符串的indexOf方法
function searchByIndexOf(keyWord, list){
    if(!(list instanceof Array)){
        return ;
    }
    if(keyWord == ""){
    	return [];
    }else{
    	var len = list.length;
	    var arr = [];
	    for(var i=0;i<len;i++){
	        //如果字符串中不包含目标字符会返回-1
	        if(list[i].indexOf(keyWord)>=0){
	            arr.push(list[i]);
	        }
	    }
	    return arr;
    }
    
}

//正则匹配
/*function searchByRegExp(keyWord, list){
    if(!(list instanceof Array)){
        return ;
    }
    var len = list.length;
    var arr = [];
    var reg = new RegExp(keyWord);
    for(var i=0;i<len;i++){
        //如果字符串中不包含目标字符会返回-1
        if(list[i].match(reg)){
            arr.push(list[i]);
        }
    }
    return arr;
}*/

实现效果

1

 

参考文章

https://blog.csdn.net/qq_39974331/article/details/80410032

https://blog.csdn.net/jlnu_wanglei/article/details/56667994

 

 

 

 

一起学习,一起进步 -.- ,如有错误,可以发评论

好的,我可以帮你编写一个HTML具有搜索功能的表格。 首先,我们需要使用HTML表格标签来创建一个表格,并使用以下代码块来创建一个具有搜索功能的表格: ```html <input type="text" id="myInput" onkeyup="searchTable()" placeholder="Search..."> <table id="myTable"> <thead> <tr> <th>Name</th> <th>Age</th> <th>City</th> </tr> </thead> <tbody> <tr> <td>John</td> <td>25</td> <td>New York</td> </tr> <tr> <td>Doe</td> <td>30</td> <td>London</td> </tr> <tr> <td>Smith</td> <td>20</td> <td>Paris</td> </tr> </tbody> </table> ``` 在上面的代码中,我们使用了HTML输入框标签来创建一个搜索框,并使用onkeyup属性来调用JavaScript函数searchTable()。在searchTable()函数中,我们可以实现表格搜索的逻辑。 接下来,我们需要编写JavaScript函数searchTable()来实现表格搜索。以下是一个示例函数: ```javascript function searchTable() { var input, filter, table, tr, td, i, txtValue; input = document.getElementById("myInput"); filter = input.value.toUpperCase(); table = document.getElementById("myTable"); tr = table.getElementsByTagName("tr"); for (i = 0; i < tr.length; i++) { td = tr[i].getElementsByTagName("td"); for (j = 0; j < td.length; j++) { txtValue = td[j].textContent || td[j].innerText; if (txtValue.toUpperCase().indexOf(filter) > -1) { tr[i].style.display = ""; break; } else { tr[i].style.display = "none"; } } } } ``` 在上面的代码中,我们首先获取输入框和表格行,然后使用toUpperCase()方法将搜索字符串和表格行中的文本都转换为大字母,以便进行比较。我们使用indexOf()方法来检查搜索字符串是否与表格行中的文本匹配,并根据结果设置表格行的显示属性。 最后,您可以将上述HTML和JavaScript代码复制并粘贴到HTML文件中,以创建具有搜索功能的表格。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空城机

有钱捧个钱场,没钱捧个人场

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值