转载请注明出处: https://home.cnblogs.com/u/zhiyong-ITNote/

修改一个已有的项目,主要是前端方面,一般的项目后端都是处理好了的,不需要改也不能改,除非特殊需求。然后就遇到了牛逼的代码。本来看别人已有的代码做开发就是一件很头疼的事,一个函数一个方法一个属性的找,眼睛疼....然后今天改代码还特别头疼,大概说说:
首先不能使用jquery-ui的自动补全插件,换句说话,所有的第三方模糊匹配/自动补全插件都不能用,但是给我懵的。ajax将请求post到C#后端随后获取数据,传到前端之后,一大串的数据,需要你在一个文本框中边检索边做模糊匹配,本来很好解决的一个事,直接使用jquery-ui的autocomplete就行,但是不行,就不让,我有啥办法,然后就自己想辙解决问题。没有特定的环境,我们就不会有对应的解决方法,更不会尝试去解决,最后解决它。我的方法是,监听input标签的写入事件,然后获取写入的值,将值与从后台获取到的数据进行匹配,匹配成功,再动态生成div以下拉列表的形式填充到输入框下面。但是遇到个问题,input框检索的是Name字段,不是一个字符串而是字符,就是我们的string类型——"hello world"之类的。那么应该怎么解决呢?我想到了数据结构书上的字符串匹配算法KMP,于是查了下jquery的匹配方法,果然有一个match,这就可以给我们解决问题了。通过这两个解决方案就可自定义的创建自动补全了。

还有一个问题,那就是input标签的placeholder属性需要实时变换,明明这个属性就支持你写入Input它就消失,你不写入它就存在。可以由于项目的已有代码问题,我实在是被坑的没辙,又不能改,只能加,然后就想对应的解决方法。我的解决方案是监控div:
一开始,div下嵌套着input,在input中写入的时候,就会产生上面我们的自动补全下拉框(其实就是一个动态的div),一旦我们选中了一个下拉框的元素,那么会在该div下生成一个span标签,也就是说,input的placeholder属性的值还存在,这代码设计....坑的是后来人....然后我该怎么解决?监控div就行。如果div下生成了一个span标签那么我们就是将input的placeholder设置为''.否则就设置为'必填字段'。代码拷贝不出来,因为在公司内网机上....

参考资料:
监听div的内容
字符的模糊匹配
查找span标签是否存在
动态添加div,及其显示与隐藏
input标签监听写入

根据参考资料就可以实现我上面说的那些了,具体请看具体分析。

转载请注明出处: https://home.cnblogs.com/u/zhiyong-ITNote/

无可奈何的开始了jquery的“奇淫技巧”的更多相关文章

  1. javascript之奇淫技巧

    最近准备面试,复习一下javascript,整理了一些javascript的奇淫技巧~ //为兼容ie的模拟Object.keys() Object.showkeys = function(obj) ...

  2. 优化DP的奇淫技巧

    DP是搞OI不可不学的算法.一些丧心病狂的出题人不满足于裸的DP,一定要加上优化才能A掉. 故下面记录一些优化DP的奇淫技巧. OJ 1326 裸的状态方程很好推. f[i]=max(f[j]+sum ...

  3. 12个实用的 Javascript 奇淫技巧

    这里分享12个实用的 Javascript 奇淫技巧.JavaScript自1995年诞生以来已过去了16个年头,如今全世界无数的网页在依靠她完成各种关键任务,JavaScript曾在Tiobe发布的 ...

  4. NGINX的奇淫技巧 —— 5. NGINX实现金盾防火墙的功能(防CC)

    NGINX的奇淫技巧 —— 5. NGINX实现金盾防火墙的功能(防CC) ARGUS 1月13日 发布 推荐 0 推荐 收藏 2 收藏,1.1k 浏览 文章整理中...... 实现思路 当服务器接收 ...

  5. NGINX的奇淫技巧 —— 3. 不同域名输出不同伺服器标识

    NGINX的奇淫技巧 —— 3. 不同域名输出不同伺服器标识 ARGUS 1月13日 发布 推荐 0 推荐 收藏 6 收藏,707 浏览 大家或许会有这种奇葩的需求...要是同一台主机上, 需要针对不 ...

  6. NGINX的奇淫技巧 —— 6. IF实现数学比较功能 (1)

    NGINX的奇淫技巧 —— 6. IF实现数学比较功能 (1) ARGUS 1月13日 发布 推荐 0 推荐 收藏 3 收藏,839 浏览 nginx的if支持=.!= 逻辑比较, 但不支持if中 & ...

  7. Zepto源码分析(二)奇淫技巧总结

    Zepto源码分析(一)核心代码分析 Zepto源码分析(二)奇淫技巧总结 目录 * 前言 * 短路操作符 * 参数重载(参数个数重载) * 参数重载(参数类型重载) * CSS操作 * 获取属性值的 ...

  8. Gradle更小、更快构建APP的奇淫技巧

    本文已获得原作者授权同意,翻译以及转载原文链接:Build your Android app Faster and Smaller than ever作者:Jirawatee译文链接:Gradle更小 ...

  9. BZOJ 3192: [JLOI2013]删除物品 奇淫技巧&树状数组

    点我看题 这题十分奇淫技巧...QAQ因为知道是树状数组的题QAQ刚开始以为维护两个数组的树状数组然后模拟从大到小,然后发现不会打QAQ 于是悄悄咪咪翻开题解了. 实际上两个数组可以看做一个数组 如 ...

随机推荐

  1. json字符串和字典的区别补充

    json字符串和字典的区别:json:(JavaScript Object Notation)的首字母缩写,字面的意思是(javascript对象表示法),这里说的json指的是类似于javascri ...

  2. axis 数据流

    产生数据流的代码 模板   重新修改了下 :]axis_data_cnt='d0; :]axis_data_frame_cnt='d0; :]delay_cnt='d0; initial begin ...

  3. ubuntu 安装Mysql8.0

    1. 去官网下载安装包 下载链接:点击打开链接 https://dev.mysql.com/downloads/mysql/ 如果你的系统是32位选择第一个,64位选择第二个 也可以用wget 下载 ...

  4. export default 和 export 区别

    转载:https://www.cnblogs.com/mengfangui/p/9073459.html   1.export与export default均可用于导出常量.函数.文件.模块等2.在一 ...

  5. python进行进制转换

    # 10进制转为2进制 print(bin(10)) # 结果:0b1010 # 2进制转为10进制 print(int("1001", 2)) # 结果:9 # 10进制转为16 ...

  6. 深入理解 Vue Computed 计算属性

    Computed 计算属性是 Vue 中常用的一个功能,我们今天来说一下他的执行过长 拿官网简单的例子来看一下: <div id="example"> <p> ...

  7. Vue router拦截 如果用户并未登录直接跳转到登录界面(最简单的cookie演示)

    router.beforeEach(function(to,from,next){ console.log('路由拦截') console.log(to.name) console.log(from. ...

  8. Java+selenium之WebDriver常见特殊情况如iframe/弹窗处理(四)

    1. iframe 的处理 查找元素必须在对应的 ifarme 中查找,否则是找不到的 // 传入参数为 frame 的序号,从0开始 driver.switchTo().frame(Int inde ...

  9. linux下配置docker和splash(图文)

    所需要环境:ubuntu16.04 第一步用:sudo apt install docker.io 第二步:完成后查看一下有没有成功 命令:docker -v,如果是输入错了写成了大V他会提示你有哪些 ...

  10. # 20165206 2017-2018-2 《Java程序设计》第4周学习总结

    20165206 2017-2018-2 <Java程序设计>第4周学习总结 教材学习内容总结 继承:继承是一种由已有的类创建新类的机制. 子类和父类:由继承得到的类称为子类,被继承的类称 ...