jQuery弹出下拉列表插件(实现kindeditor的@功能)


Posted in Javascript onAugust 16, 2016

这几天有个工作需求,就是在富文本输入区域(kindeditor)可以有@功能,能够容易提示用户名的(像在qq群组@人一样)。在网上找了一个叫bootstrap-suggest的插件,却不能满足我的需求,于是我决定在该插件上改良,主要是下面几点:

1. @内容的输入,能够匹配多个属性值。

2. 选中列表值后,是成块插入kindeditor的(方便删除,也利于区分文本)。

3. 修正输入偶数关键字@功能失效问题。

前言

在一开始,我用bootstrap-suggest(https://github.com/lodev09/bootstrap-suggest),这个插件能够实现以下效果。

jQuery弹出下拉列表插件(实现kindeditor的@功能)

但是我发觉有几个问题:

1. 只能单一匹配(可能存在需要匹配拼音或中文)。

2. 偶数位的@功能会失效。

3. 选取值后,只是简单文本(没有qq一样那种成块效果)。

jquery-kindeditor-suggest

由于我不想重复造轮子,于是决定在上面插件做调整,以满足我的需求,有几个关键地方需说明。

1. startOffset取值错误问题。

如果使用了KindEditor的insertHTML,会导致下一次startOffset取值出错。原插件在获取光标位置(top,left)时,会需要插入一个span去获取,在获取完后删除,但是这时候下一次editor.cmd.range.startOffset;就出错。

于是我修改了插入的方式:

var doc = editor.cmd.range.doc,
range = editor.cmd.range,
frag = doc.createDocumentFragment();
KindEditor('@<span id="input-textarea-caret-position-mirror-span">.</span>' , doc).each(function() {
frag.appendChild(this);
});
range.deleteContents();
range.insertNode(frag);
range.collapse(false);

PS:在170行。

2. 替换选择值

将@后面的输入内容删除(包含@),然后插入一个完整的标签(选择值),还要保证光标位置正确。

var dType = !!el.cmd.range.startContainer.data ? "data" : "innerHTML"; //这个取值最关键
var sVal = el.cmd.range.startContainer[dType];
var lAt = sVal.lastIndexOf(this.key);
el.cmd.range.startContainer[dType] = sVal.substring(0, lAt) ;
el.insertHtml("<span contenteditable='false'>"+this.key+item.value+' </span>' +'<span id="input-textarea-caret-position-mirror-span">.</span>');
var span = el.edit.doc
.getElementById('input-textarea-caret-position-mirror-span'); 
var range = el.edit.doc.createRange();
range.selectNodeContents(span);
range.collapse(false);
var sel = el.edit.win.getSelection();
sel.removeAllRanges();
sel.addRange(range); //hack:修正下一次startOffset
span.parentNode.removeChild(span);

PS:在442行。

修改后效果

内容是富文本输入区域,插入的成块文本。

jQuery弹出下拉列表插件(实现kindeditor的@功能)

总结

虽然是基于他人的插件,但我在修复问题上也花费了很多心思,之前一直发现没有精确针对kindeditord @功能的插件,所以我就自己弄了下。

我把源代码放在Github上了,有需要的可去下:https://github.com/codingforme/jquery-kindeditor-suggest

以上所述是小编给大家介绍的jQuery弹出下拉列表插件(实现kindeditor的@功能),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jquery 模拟雅虎首页的点击对话框效果
Apr 11 Javascript
js中通过父级进行查找定位元素
Jun 15 Javascript
AngularJS入门教程(一):静态模板
Dec 06 Javascript
js实现消息滚动效果
Jan 18 Javascript
node.js程序作为服务并在windows下开机自启动(用forever)
Mar 29 Javascript
基于Bootstrap的标签页组件及bootstrap-tab使用说明
Jul 25 Javascript
React Native第三方平台分享的实例(Android,IOS双平台)
Aug 04 Javascript
ActiveX控件的使用-js实现打印超市小票功能代码详解
Nov 22 Javascript
javaScript动态添加Li元素的实例
Feb 24 Javascript
关于JavaScript 数组你应该知道的事情(推荐)
Apr 10 Javascript
js实现无限瀑布流实例方法
Sep 16 Javascript
Js生成随机数/随机字符串的方法小结【5种方法】
May 27 Javascript
javascript验证手机号和实现星号(*)代替实例
Aug 16 #Javascript
解决wx.onMenuShareTimeline出现的问题
Aug 16 #Javascript
JavaScript里 ==与===区别详解
Aug 16 #Javascript
DOM中事件处理概览与原理的全面解析
Aug 16 #Javascript
总结javascript中的六种迭代器
Aug 16 #Javascript
你知道setTimeout是如何运行的吗?
Aug 16 #Javascript
深入理解(function(){... })();
Aug 16 #Javascript
You might like
PHP图片处理之使用imagecopyresampled函数裁剪图片例子
2014/11/19 PHP
php实现改变图片直接打开为下载的方法
2015/04/14 PHP
PHP文件系统管理(实例讲解)
2017/09/19 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
2019/02/25 PHP
深入认识javascript中的eval函数
2009/11/02 Javascript
跟着Jquery API学Jquery之一 选择器
2010/04/07 Javascript
JS小功能(操作Table--动态添加删除表格及数据)实现代码
2013/11/28 Javascript
JS实现适合于后台使用的动画折叠菜单效果
2015/09/21 Javascript
AngularJS入门教程之路由机制ngRoute实例分析
2016/12/13 Javascript
Restify中接入Socket.io报Error:Can’t set headers的错误解决
2017/03/28 Javascript
Vue一次性简洁明了引入所有公共组件的方法
2018/11/28 Javascript
vue添加class样式实例讲解
2019/02/12 Javascript
浅谈Vuex注入Vue生命周期的过程
2019/05/20 Javascript
微信小程序网络请求实现过程解析
2019/11/06 Javascript
python函数缺省值与引用学习笔记分享
2013/02/10 Python
Python装饰器使用示例及实际应用例子
2015/03/06 Python
python实现清屏的方法
2015/04/30 Python
浅谈Python实现2种文件复制的方法
2018/01/19 Python
Python过滤txt文件内重复内容的方法
2018/10/21 Python
python实现一组典型数据格式转换
2018/12/15 Python
Python函数中不定长参数的写法
2019/02/13 Python
用opencv给图片换背景色的示例代码
2020/07/08 Python
python中如何使用虚拟环境
2020/10/14 Python
英国领先的电子、技术和办公用品购物网站:Ebuyer
2018/04/04 全球购物
缓解脚、腿和背部疼痛:Z-CoiL鞋
2019/03/12 全球购物
如果有两个类A,B,怎么样才能使A在发生一个事件的时候通知B
2016/03/12 面试题
应届生法律求职信
2013/10/22 职场文书
我未来的职业规划范文
2014/01/11 职场文书
服务员岗位职责
2014/01/29 职场文书
弘扬民族精神演讲稿
2014/05/07 职场文书
关于美容院的活动方案
2014/08/14 职场文书
婚前保证书范文
2015/02/28 职场文书
乒乓球比赛通知
2015/04/27 职场文书
银行柜员优质服务心得体会
2016/01/22 职场文书
Win11如何修改dns?Win11修改dns图文教程
2022/01/18 数码科技
python中redis包操作数据库的教程
2022/04/19 Python