PS:这次做的这个小插件只是在前端实现,并没有经过数据库。需要用到的的框架:1.bootstrap.css的样式 2.Vue.js

最终效果如下:

JS部分:

$(window).click(function () {
content_data.is_selected = 'N';
});
var content_data = {
blog_classify: '',//分类搜索框
classify_data: [//所有分类
{name: "宠物技能培养"},
{name: "宠物健康教育"},
{name: "故事闲谈"},
{name: "宠物图库"},
{name: "宠物知识竞猜"},
{name: "宠物笑话"},
],
classify_new: [],//搜索框选项
is_selected: 'N'//判断搜索框里面的元素有没有被点击
}; var content_el = new Vue({
el: "#blog_el",
data: content_data,
watch: {
blog_classify: function (value) {
content_data.classify_new = [];
if (content_data.is_selected === 'N') {
for (var i = 0; i < content_data.classify_data.length; i++) {
if (content_data.classify_data[i].name.indexOf(value) !== -1) {
content_data.classify_new.push(content_data.classify_data[i].name)
}
}
}
}
},
其中,blog_classify是要在input框里面声明的v-model属性。当blog_classify属性的值发生变化时,会自动调用watch里面对应的方法。
我的想法:把classify_data[]里面的数据全都遍历一遍,用indexof方法判断输入的关键字是否存在于classify_data[]中,
如果存在就添加到classify_new[]中,最后在html里面用v-for生成可选项列表在在前台展示。
前台代码:
<div class="form-group" style="margin-bottom: 0;">
<label class="control-label">分类:</label>
<input v-model="blog_classify" type="text" class="form-control" id="question-classify">
</div>
<div class="col-md-6" style="position: fixed;padding-left: 0">
<div v-if="blog_classify.length>0" class="list-group"
style="max-height: 100px;overflow: auto;">
<a @click="classify_selected(statement)" href="javascript:void(0)"
class="list-group-item" v-for="statement,index in classify_new">{{statement}}</a>
</div>
</div> 前端主要是v-model和v-for这两个属性。v-model对blog_classify属性进行双向绑定,当blog_classify的值发生变化时,classify_new[]的数组内容也会动态改变。v-for会根据classify_new[]的内容动态改变列表的长度和
内容。
  这只是个人的一个想法,没有参照其他人的答案。后面写完之后发现百度里面好像还没有用Vue.js做类似的一个东西,就简单写来交流一下。这只是一个简单的写法,
不足的地方希望各位大佬交流更优化的方式。

怎么用js写一个类似于百度输入框的搜索插件的更多相关文章

  1. 分享:计算机图形学期末作业!!利用WebGL的第三方库three.js写一个简单的网页版“我的世界小游戏”

    这几天一直在忙着期末考试,所以一直没有更新我的博客,今天刚把我的期末作业完成了,心情澎湃,所以晚上不管怎么样,我也要写一篇博客纪念一下我上课都没有听,还是通过强大的度娘完成了我的作业的经历.(当然作业 ...

  2. JS写一个简单日历

    JS写一个日历,配合jQuery操作DOM <!DOCTYPE html> <html> <head> <meta charset="UTF-8&q ...

  3. 前端与编译原理——用JS写一个JS解释器

    说起编译原理,印象往往只停留在本科时那些枯燥的课程和晦涩的概念.作为前端开发者,编译原理似乎离我们很远,对它的理解很可能仅仅局限于"抽象语法树(AST)".但这仅仅是个开头而已.编 ...

  4. 如何使用 js 写一个正常人看不懂的无聊代码

    如何使用 js 写一个正常人看不懂的无聊代码 代码质量, 代码可读性, 代码可维护性, clean code WAT js WTF https://www.destroyallsoftware.com ...

  5. 用原生js写一个"多动症"的简历

    用原生js写一个"多动症"的简历 预览地址源码地址 最近在知乎上看到@方应杭用vue写了一个会动的简历,觉得挺好玩的,研究一下其实现思路,决定试试用原生js来实现. 会动的简历实现 ...

  6. 分享一个jquery写的类似于百度的搜索框,(可动态配置,可单列或者table格式,可填充数据)

    需求:类似于百度的搜索框,可配置,可单列可table格式,可填充数据.页面可多次使用,简单,易用. 想法:使用jquery,css,ajax,前台调用,后台返回json数据. jquery代码: va ...

  7. 【Part1】用JS写一个Blog(node + vue + mongoDB)

    学习JS也有一段时间了,准备试着写一个博客项目,前后端分离开发,后端用node只提供数据接口,前端用vue-cli脚手架搭建,路由也由前端控制,数据异步交互用vue的一个插件vue-resourse来 ...

  8. [NodeJS]使用Node.js写一个简单的在线聊天室

    声明:教程来自<Node即学即用>.源代码案例均出自此书.博文仅为个人学习笔记. 第一步:创建一个聊天server. 首先,我们先来写一个Server: var net = require ...

  9. 使用 Node.js 写一个代码生成器

    背景 第一次接触代码生成器用的是动软代码生成器,数据库设计好之后,一键生成后端 curd代码.之后也用过 CodeSmith , T4.目前市面上也有很多优秀的代码生成器,而且大部分都提供可视化界面操 ...

随机推荐

  1. 「干货」常用的10个网络DOS命令,菜鸟学了变高手

    1 ping命令 1命令格式 ping 主机名 ping 域名 ping IP地址 如图所示,使用ping命令检查到IP地址210.43.16.17的计算机的连通性,该例为连接正常.共发送了四个测试数 ...

  2. day01 继承

  3. 51Nod 1097 拼成最小的数(字符串的排序)

    #include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> ...

  4. 转 错误:ORA-28002/ORA-65162 : the password will expire within 7 days 解决方法

    今天在使用sqlplus时出现 =============================================== ERROR:ORA-28002: the password will e ...

  5. python对文件的压缩解压

    python自带的zipfile的模块支持对文件的压缩和解压操作 zipfilp.ZipFile 表示创建一个zip对象 zipfile.ZipFile(file[, mode[, compressi ...

  6. C51存储的优化

    我们知道51单片机只有128BYTE的RAM, 有的增强型有XRAM,此时编程时就要注意,否则就有可能超出空间 1 对于各模块的全局变量.静态变量.全局枚举型常量,静态枚举型常量.个别操作存储(如外部 ...

  7. AtCoder D - 高橋君と見えざる手 / An Invisible Hand 简单思维题

    http://arc063.contest.atcoder.jp/tasks/arc063_b 因为每次都是选取最大值,那么用dp[i]表示第i个数结尾能得到最大是多少. 其实就是用a[i]去减去左边 ...

  8. 求N之下的所有素数

    No.1 f=lambda n: [x for x in range(1,n) if not [y for y in range(2,x) if x%y ==0 ]] No.2 def prime(n ...

  9. CF1043D Mysterious Crime

    思路: 参考了http://codeforces.com/blog/entry/62797,把第一个序列重标号成1,2,3,...,n,在剩下的序列中寻找形如x, x + 1, x + 2, ...的 ...

  10. css命名规范—CSS样式命名整理

    CSS样式命名整理 页面结构 容器: container/wrap整体宽度:wrapper页头:header内容:content页面主体:main页尾:footer导航:nav侧栏:sidebar栏目 ...