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颜色选择器ColorPicker实现代码
Nov 14 Javascript
jquery获取子节点和父节点的示例代码
Sep 10 Javascript
js鼠标悬浮出现遮罩层的方法
Jan 28 Javascript
JS封装的自动创建表格的实现代码
Jun 15 Javascript
微信小程序 地图定位简单实例
Oct 14 Javascript
实例详解display:none与visible:hidden的区别
Mar 30 Javascript
Angular 4中如何显示内容的CSS样式示例代码
Nov 06 Javascript
详解Webpack实战之构建 Electron 应用
Dec 25 Javascript
vue-router动态设置页面title的实例讲解
Aug 30 Javascript
Vue中的验证登录状态的实现方法
Mar 09 Javascript
JS学习笔记之闭包小案例分析
May 29 Javascript
vue跳转同一个组件,参数不同,页面接收值只接收一次的解决方法
Nov 05 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中基本符号及使用方法
2010/03/23 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
2011/11/10 PHP
PHP之sprintf函数用法详解
2014/11/12 PHP
PHP、Java des加密解密实例
2015/04/27 PHP
详解PHP编码转换函数应用技巧
2016/10/22 PHP
php结合redis高并发下发帖、发微博的实现方法
2016/12/15 PHP
PHP中非常有用却鲜有人知的函数集锦
2019/08/17 PHP
Yii框架日志操作图文与实例详解
2019/09/09 PHP
Laravel5.1 框架表单验证操作实例详解
2020/01/07 PHP
疯掉了,尽然有js写的操作系统
2007/04/23 Javascript
动态加载dtree.js树treeview(示例代码)
2013/12/17 Javascript
js仿手机页面文件下拉刷新效果
2016/10/14 Javascript
BootStrap整体框架之基础布局组件
2016/12/15 Javascript
利用JS实现简单的日期选择插件
2017/01/23 Javascript
详解webpack es6 to es5支持配置
2017/05/04 Javascript
JS Input里添加小图标的两种方法
2017/11/11 Javascript
vue bus全局事件中心简单Demo详解
2018/02/26 Javascript
Nodejs Express 通过log4js写日志到Logstash(ELK)
2018/08/30 NodeJs
vue实现从外部修改组件内部的变量的值
2020/07/30 Javascript
[47:42]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python中的推导式使用详解
2015/06/03 Python
Python初学时购物车程序练习实例(推荐)
2017/08/08 Python
Python实现列表删除重复元素的三种常用方法分析
2017/11/24 Python
pygame实现俄罗斯方块游戏
2018/06/26 Python
Pycharm更换python解释器的方法
2018/10/29 Python
Tensorflow实现酸奶销量预测分析
2019/07/19 Python
Django中使用MySQL5.5的教程
2019/12/18 Python
pytorch 改变tensor尺寸的实现
2020/01/03 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
2020/06/15 Python
中国双语服务优势的在线购票及活动平台:247tickets
2018/10/26 全球购物
自主实习接收函
2014/01/13 职场文书
邓小平理论心得体会
2014/09/09 职场文书
2014幼儿园教育教学工作总结
2014/12/17 职场文书
2015年财务人员个人工作总结
2015/07/27 职场文书
4种非常实用的python内置数据结构
2021/04/28 Python
Python开发简易五子棋小游戏
2022/05/02 Python