Javascript富文本编辑器与获取和设置光标位置的支持
Javascript Rich Text Editor with get AND set cursor position support
是否有支持获取和设置光标位置的javascript富文本编辑器?
我不会解释这些可怕的细节,但这将工作:
function getTextNodesIn(node) {
var textNodes = [];
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, getTextNodesIn(children[i]));
}
}
return textNodes;
}
function setSelectionRange(el, start, end) {
if (document.createRange && window.getSelection) {
var range = document.createRange();
range.selectNodeContents(el);
var textNodes = getTextNodesIn(el);
var foundStart = false;
var charCount = 0, endCharCount;
for (var i = 0, textNode; textNode = textNodes[i++]; ) {
endCharCount = charCount + textNode.length;
if (!foundStart && start >= charCount && (start < endCharCount || (start == endCharCount && i < textNodes.length))) {
range.setStart(textNode, start - charCount);
foundStart = true;
}
if (foundStart && end <= endCharCount) {
range.setEnd(textNode, end - charCount);
break;
}
charCount = endCharCount;
}
var sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
} else if (document.selection && document.body.createTextRange) {
var textRange = document.body.createTextRange();
textRange.moveToElementText(el);
textRange.collapse(true);
textRange.moveEnd('character', end);
textRange.moveStart('character', start);
textRange.select();
}
}
现在你只需找到你的元素并选择stuff:
setSelectionRange(document.getElementById('dijitEditorBody'), 10, 50);
是的,reactor .js正在做:
$('#redactor').redactor('setCaret', element, 4);
我正在寻找dijit的解决方案。编辑偶然发现了这个老问题。我是这样做的(这是dijit/_editor/EnterKeyHandling插件的翻版)。
我创建了自己的插件,像这样:
define([
"dojo/_base/declare",
"dijit/_editor/_Plugin",
"dijit/_editor/range",
"dijit/_editor/selection"
], function(declare, _Plugin, rangeapi, selectionapi) {
var MyPlugin = declare(_Plugin, {
setToolbar: function(editorToolbar){
// [...]
this.own(this.editor.on('keypressed', lang.hitch(this, 'onKeyPressed')));
},
onKeyPressed: function(){
// summary:
// Handler for after the user has pressed a key, and the display has been updated.
var block = undefined,
blockNode = undefined,
selection = rangeapi.getSelection(this.editor.window),
range = selection.getRangeAt(0);
if(!range.collapsed){
range.deleteContents();
selection = rangeapi.getSelection(this.editor.window);
range = selection.getRangeAt(0);
}
block = rangeapi.getBlockAncestor(range.endContainer, null, this.editor.editNode);
if (block.blockNode) {
blockNode = block.blockNode;
// this is the node under the cursor...
console.debug(blockNode);
}
});
_Plugin.registry["myplugin"] = _Plugin.registry["myplugin"] = function(args){
return new MyPlugin();
};
return MyPlugin;
});
然后将"myplugin"添加到dijit/Editor的"extraPlugins"属性中
相关文章:
- 自定义函数中的光标位置
- 如何在玩TimelineMax(GSAP)后重置原始位置
- jQuery/Javascript>on单击将文本放置在最后一个已知的光标位置
- 当用户单击按钮(在光标位置)时,在输入字段中添加一个文本字符串
- 内容可编辑分区-根据内部HTML位置的光标位置
- 保持光标位置元素在顶部使用 svg
- 保存键控触发器时保持光标位置的最佳做法
- 如何在java脚本中获取光标位置
- 获取光标位置或光标在 TinyMCE 中的行数
- 如何在每次页面重新加载时更改渐变背景,同时保持光标位置元素处于活动状态
- 在Chrome中,光标位置异常地位于输入值的末尾
- 在光标位置的文本区域中插入一个字符串,并进行一些更改
- 如何从谷歌地图事件访问光标位置(即页面的x和y轴)
- 如何在网页加载asp.net上显示文本框中第二个字母的光标位置
- 当前光标位置(百分比)
- GWT:如何从当前光标位置或所选文本中获取css样式的属性
- 在光标位置插入HTML,并使用javascript将光标移动到插入的HTML的末尾
- jQuery:使用插件Tipsy将工具提示附加到鼠标光标位置
- 防止“向上箭头”;键在文本框内重置光标位置
- 在dom更改后重置可编辑内容中的光标位置