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 相关文章推荐
url 编码 js url传参中文乱码解决方案
Apr 11 Javascript
javascript中的变量是传值还是传址的?
Apr 19 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
Feb 22 Javascript
javascript定时器完整实例
Feb 10 Javascript
超详细的javascript数组方法汇总
Nov 21 Javascript
修改js confirm alert 提示框文字的简单实例
Jun 10 Javascript
Webpack打包慢问题的完美解决方法
Mar 16 Javascript
JS在if中的强制类型转换方式
Jul 15 Javascript
vue 项目build错误异常的解决方法
Apr 22 Javascript
jQuery zTree插件快速实现目录树
Aug 16 jQuery
antd-mobile ListView长列表的数据更新遇到的坑
Apr 08 Javascript
vue基于better-scroll仿京东分类列表
Jun 30 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
FCKeditor添加自定义按钮
2008/03/27 PHP
php Rename 更改文件、文件夹名称
2011/05/24 PHP
php 文章调用类代码
2011/08/11 PHP
php之XML转数组函数的详解
2013/06/07 PHP
利用PHP将部分内容用星号替换
2020/04/21 PHP
Javascript实例教程(19) 使用HoTMetal(7)
2006/12/23 Javascript
js模拟实现Array的sort方法
2007/12/11 Javascript
js 判断 enter 事件
2009/02/12 Javascript
javascript 鼠标拖动图标技术
2010/02/07 Javascript
jquery ready(fn)事件使用介绍
2013/08/21 Javascript
简述jQuery ajax的执行顺序
2016/01/05 Javascript
JavaScript小技巧整理篇(非常全)
2016/01/26 Javascript
解析浏览器端的AJAX缓存机制
2016/06/21 Javascript
jQuery获取table下某一行某一列的值实现代码
2017/04/07 jQuery
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
Bootstrap 模态框自定义点击和关闭事件详解
2018/08/10 Javascript
微信小程序自定义tabBar组件开发详解
2020/09/24 Javascript
详解VUE Element-UI多级菜单动态渲染的组件
2019/04/25 Javascript
JS Web Flex弹性盒子模型代码实例
2020/03/10 Javascript
python不带重复的全排列代码
2013/08/13 Python
PyQt5每天必学之像素图控件QPixmap
2018/04/19 Python
Python 实现中值滤波、均值滤波的方法
2019/01/09 Python
在Django的View中使用asyncio的方法
2019/07/12 Python
Python基于类路径字符串获取静态属性
2020/03/12 Python
python实现拼接图片
2020/03/23 Python
解决更改AUTH_USER_MODEL后出现的问题
2020/05/14 Python
django项目中使用云片网发送短信验证码的实现
2021/01/19 Python
Html5 localStorage入门教程
2018/04/26 HTML / CSS
iPhoneX安全区域(Safe Area)底部小黑条在微信小程序和H5的屏幕适配
2020/04/08 HTML / CSS
英国最受欢迎的平价女士时装零售商:Roman Originals
2019/11/02 全球购物
运动会广播稿200米
2014/01/27 职场文书
电工技术比武方案
2014/05/11 职场文书
教师党的群众路线教育实践活动学习笔记
2014/11/05 职场文书
给男朋友的道歉短信
2015/05/12 职场文书
公司开业的祝贺语大全(60条)
2019/07/05 职场文书
DIY胆机必读:各国电子管评价
2022/04/06 无线电