题解 | #智能提示#

智能提示

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节点']) 后的结果

//输入中各种不能被识别的正则表达式的特殊字符,对特殊字符需要进行转义处理!!!
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');
        }
    }
}


#JavaScript#
在线编程题解 文章被收录于专栏

web技术

全部评论

相关推荐

头像
点赞 评论 收藏
转发
头像
昨天 23:48
已编辑
门头沟学院 化工与制药类
ps:有没有哥们会那个sql题
投递美团等公司9个岗位 >
点赞 评论 收藏
转发
2 2 评论
分享
牛客网
牛客企业服务