题解 | #智能提示#
智能提示
https://www.nowcoder.com/practice/efccf73b4ceb4446b6d71127f874e6d3
本题展示了一个简化版的搜索框智能提示功能,请按照如下要求完成suggest函数。
1、当输入框的值发生变化时,系统会调用suggest函数,用于显示/隐藏智能提示数据,参数items为一个字符串数组。
2、当items中的字符串和输入框的值匹配时,将匹配的数据依次渲染在ul下的li节点中,并显示.js-suggest节点,否则移除ul下的所有li节点,并隐藏.js-suggest节点
3、输入框的值需要移除两侧空白再进行匹配
4、输入框的值为空时,按照全部不匹配处理
5、字符串使用模糊匹配,比如"北大"能匹配"北大"和"北京大学",但不能匹配"大北京",即按照 /北.*?大.*?/ 这个正则进行匹配
6、通过在.js-suggest节点上添加/移除 hide 这个class来控制该节点的隐藏/显示
7、当前界面是执行 suggest(['不匹配数据', '根据输入框的值', '从给定字符串数组中筛选出匹配的数据,依次显示在li节点中', '如果没有匹配的数据,请移除所有li节点,并隐藏.js-suggest节点']) 后的结果
1、当输入框的值发生变化时,系统会调用suggest函数,用于显示/隐藏智能提示数据,参数items为一个字符串数组。
2、当items中的字符串和输入框的值匹配时,将匹配的数据依次渲染在ul下的li节点中,并显示.js-suggest节点,否则移除ul下的所有li节点,并隐藏.js-suggest节点
3、输入框的值需要移除两侧空白再进行匹配
4、输入框的值为空时,按照全部不匹配处理
5、字符串使用模糊匹配,比如"北大"能匹配"北大"和"北京大学",但不能匹配"大北京",即按照 /北.*?大.*?/ 这个正则进行匹配
6、通过在.js-suggest节点上添加/移除 hide 这个class来控制该节点的隐藏/显示
7、当前界面是执行 suggest(['不匹配数据', '根据输入框的值', '从给定字符串数组中筛选出匹配的数据,依次显示在li节点中', '如果没有匹配的数据,请移除所有li节点,并隐藏.js-suggest节点']) 后的结果
//输入中各种不能被识别的正则表达式的特殊字符,对特殊字符需要进行转义处理!!! function suggest(items) { var input = document.querySelector('.js-input'); var div = document.querySelector('.js-suggest'); var ul = document.querySelector('.js-suggest ul'); //去除输入字符串两端空白 var inputValue = input.value.trim(); ul.innerHTML = ''; // 输入框的值为空时,按照全部不匹配处理 if(!inputValue){ div.classList.add('hide'); }else{ //字符串和输入框的值匹配 var str = ''; // 正则表达式 var istrue = false; if(/(\(|\)|\||\.|\?|\*|\+|\\|\[|\])/.test(inputValue.toString())){ Array.from(inputValue.toString()).forEach(el=>{ str += '\\'+ el+'.*?'; }) }else{ Array.from(inputValue.toString()).forEach(el=>{ str += el+'.*?'; }) } items.forEach(item=>{ console.log(item.search(str)) if(item.search(str)!=-1){ istrue=true; ul.innerHTML += `<li>${item}</li>`; } }) if(istrue){ console.log('suggest'); div.className='js-suggest'; }else{ console.log('hide'); div.classList.add('hide'); } } }
在线编程题解 文章被收录于专栏
web技术