如何在选择区域时保存剑道UI编辑器中的光标位置
How to save the cursor position in a Kendo UI Editor when selecting a range?
我使用的是剑道UI编辑器。我想突出显示在编辑器中键入/粘贴的多余字符。这是我所做的:
$(function () {
var $editor = $('#txt-editor');
$editor.kendoEditor({
keydown: ValidateRichTextEditor
});
});
function ValidateRichTextEditor(e) {
var editor = $(e.sender.textarea),
kendoEditor = editor.data('kendoEditor'),
characters = kendoEditor.body.innerText.length,
limit = editor.data('valLengthMax');
if (characters > limit) {
var textNodes = getTextNodes(kendoEditor.body),
charCount = 0,
startNode, startOffset;
for (var i = 0, textNode; textNode = textNodes[i++];) {
var chars = charCount + textNode.length;
if (limit < chars) {
//set the text node as the starting node
//if the characters hit the limit set
startNode = textNode;
startOffset = chars - charCount;
break;
}
//add the length of the text node to the current character count
charCount += textNode.length;
}
var range = kendoEditor.createRange();
range.setStart(startNode, startOffset);
kendoEditor.selectRange(range);
kendoEditor.document.execCommand('backColor', false, '#fcc');
}
}
function getTextNodes(node) {
var textNodes = [];
//node type 3 is a text node
if (node.nodeType == 3) {
textNodes.push(node);
} else {
var children = node.childNodes;
for (var i = 0, len = children.length; i < len; i++) {
textNodes.push.apply(textNodes, getTextNodes(children[i]));
}
}
return textNodes;
}
jsfiddle
到目前为止,突出显示工作,但光标位置始终在突出显示开始的位置。我如何定位光标,使它能记住它最后的位置?比如说,我继续输入,光标应该在编辑器内容的末尾。或者当我点击内容中间的某个位置时,光标应该从我点击内容的位置开始。
在这方面的帮助将是非常感激的。谢谢!如果我正确地解释了您的需求,那么有一个比您尝试的更简单的解决方案。
(function () {
var $editor = $('#txt-editor'),
limit = $editor.data('valLengthMax')
limitExceeded = false;
$editor.kendoEditor({
keyup: ValidateRichTextEditor
});
function ValidateRichTextEditor(e) {
var characters = this.body.innerText.length;
console.log('''' + this.body.innerText + ''' : ' + this.body.innerText.length);
if (characters >= limit && !limitExceeded) {
limitExceeded = true;
this.exec('backColor', { value: '#fcc' });
}
}
})();
更新1:这个解决方案有点bug。退格键会导致一些小问题。
更新2:经过大量的摆弄,你不能信任body.innerText.length
。一旦执行了背景颜色样式,它就永远不会返回正确的值。我的理由是,添加到正文中的<span>
元素被算作字符,退格键不会像预期的那样删除它们。
下面是一个JSBin示例,您可以在输入时读取控制台输出。至少可以说不合逻辑。
相关文章:
- ExtJS网格单元格编辑器,防止焦点松动问题
- 可以't使用PHP使用Froala编辑器上传图像URL
- 如何在corona sdk中从CK编辑器中检索数据
- Eclipse编辑器中无法访问的代码
- 可以'使用angular ui ace时,请不要查看ace编辑器
- Javascript使用自定义按钮手动打开Kendo UI网格编辑器
- Kendo ui Grid:标准的HTML5输入日期时间可以用作单元格编辑器吗
- 导航后设置angular ui tinymce编辑器内容
- 单元格值未在使用自定义下拉列表编辑器的剑道 UI 网格中正确显示
- 日期选取器 UI 在编辑页面上无法正常工作
- 单击CK编辑器工具栏上的获取UI按钮
- 隐藏和显示剑道ui编辑器工具栏
- 如何限制用户在ui ace编辑器中只能编写一个javascript函数(方法)
- 剑道窗口内的剑道UI编辑器
- 如何在选择区域时保存剑道UI编辑器中的光标位置
- 如何设置剑道UI编辑器的selecterange来突出显示多余的字符,如Twitter
- Kendo UI在编辑器中从小部件访问详细网格实例
- 剑道UI编辑器-强制所有新链接到新窗口
- 没有UI的RichText WYSIWYG编辑器(仅限JavaScript API)
- 剑道UI网格:无法创建将添加到数据源的自定义网格编辑器