JavaScript 30 Day -- 05 快速匹配
来源:互联网 发布:黄药师就爱宅 知乎 编辑:程序博客网 时间:2024/05/16 07:13
实现效果:
在输入框中输入一个词,迅速匹配,展示含有这个词的诗句,诗句的来源 json 数据是加载页面时从网络中异步获得。
关键点:
Promise fetch() //异步请求 then() json()Array filter() //过滤器 map() push() //添加 join() Spread syntax 扩展语句RegExp match() //检索 replace() //替换监听 addEventListener()
html
<form class="search-form"> <input type="text" class="search" placeholder="City or State"> <ul class="suggestions"> <li>Filter for a city</li> <li>or a state</li> </ul> </form>
JavaScript
const endpoint = 'https://gist.githubusercontent.com/Miserlou/c5cd8364bf9b2420bb29/raw/2bf258763cdddd704f8ffd3ea9a3e81d25e2c6f6/cities.json';const gushi = 'https://gist.githubusercontent.com/soyaine/81399bb2b24ca1bb5313e1985533c640/raw/bdf7df2cbcf70706c4a5e51a7dfb8c933ed78878/TangPoetry.json';var arr = [];fetch(gushi).then(function(pam){ return pam.json()}).then(function(pam2){ // console.log(pam2); return Array.prototype.push.apply(arr,pam2); // arr.push(...pam2);});function findGushi(pam1,arr){ return arr.filter(function(pam3){ var regexp = new RegExp(pam1,'gi'); //正则表达式 var author = pam3.detail_author.join(''); return pam3.title.match(regexp) ||pam3.detail_text.match(regexp)||author.match(regexp); })}function showGushi(){ // console.log(this.value); var showG = findGushi(this.value,arr); var regexp = new RegExp(this.value,'gi'); console.log(showG); //failed -> this.value 为空 var html = showG.map(function(pam){ console.log(this.value); var text = pam.detail_text.replace(regexp,`<span class="hl">${ this.value }</span>`); var title = pam.title.replace(regexp,`<span class="hl">${ this.value }</span>`); return ` <li> <span class='poet'>${text}</span> <span class='title'>${ title } - ${ pam.detail_author[0] }</span> </li> `; }).join(""); //succeed var html = showG.map(pam =>{ var text = pam.detail_text.replace(regexp,`<span class="hl">${ this.value }</span>`); var title = pam.title.replace(regexp,`<span class="hl">${ this.value }</span>`); return ` <li> <span class='poet'>${text}</span> <span class='title'>${ title } - ${ pam.detail_author[0] }</span> </li> `; }).join(''); suggestions.innerHTML = html;}var search = document.querySelector('.search');var suggestions = document.querySelector('.suggestions');search.addEventListener('change',showGushi);search.addEventListener('keyup',showGushi);
阅读全文
0 0
- JavaScript 30 Day -- 05 快速匹配
- JavaScript 30 Day -- 02 时钟
- JavaScript 30 Day -- 06 Array
- JavaScript 30 Day -- 01 JavaScript Drum Kit
- JavaScript 30 Day -- 03 CSS Variables
- JavaScript 30 Day -- 07 彩虹画笔
- JavaScript 30 Day -- 11 键盘输入的验证
- JavaScript 30 Day -- 12 图片的滑入滑出
- JavaScript:Day one
- JavaScript:Day two
- second day for javascript
- 3-day(JavaScript)
- JavaScript 30 Day -- 04 可伸缩的图片墙
- JavaScript 30 Day -- 08 Console 调试技巧指南
- JavaScript 30 Day -- 09 Shift 的多选功能
- JavaScript 30 Day -- 10 自定义视频播放器
- JavaScript 30 Day -- 13 JS中的引用与复制
- day-05
- Tab键对InputField进行换行处理
- 不受spring管理的类注入问题
- 对象的克隆——原型模式(三):浅克隆,深克隆
- Java-----Mac安装多个JDK
- 无名飞控姿态结算和控制(一)
- JavaScript 30 Day -- 05 快速匹配
- RxJava的使用解析(一)
- php实现比较两个字符串日期大小的方法
- MySql insert into 的两种语法
- C++(1)类和对象——定义
- MD5Util
- 蓝桥杯练习题之字母图形
- 机器学习之决策树
- 刷新局部iframe