但是我发觉有几个问题:
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行。
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:修正下一次startOffsetspan.parentNode.removeChild(span);PS:在442行。
总结
虽然是基于他人的插件,但我在修复问题上也花费了很多心思,之前一直发现没有精确针对kindeditord @功能的插件,所以我就自己弄了下。
我把源代码放在Github上了,有需要的可去下:https://github.com/codingforme/jquery-kindeditor-suggest
以上所述是小编给大家介绍的jQuery弹出下拉列表插件(实现kindeditor的@功能),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!