Javascript 使用textangular记录并恢复contenteditable div中插入符号的位置
我已经看到了很多代码片段,详细介绍了如何在contenteditable div中获取和设置插入符号位置,但在我的示例中,我无法使其工作: 我使用的是所见即所得文本编辑器(textAngular)。我已经为用户提供了在光标位置插入交叉引用的功能。他们单击一个按钮,打开一个对话框供他们选择,然后在当前光标位置插入一个html节点 光标的位置可以在div内的子节点内,例如p标记和/或其他格式标记Javascript 使用textangular记录并恢复contenteditable div中插入符号的位置,javascript,html,cursor,contenteditable,cursor-position,Javascript,Html,Cursor,Contenteditable,Cursor Position,我已经看到了很多代码片段,详细介绍了如何在contenteditable div中获取和设置插入符号位置,但在我的示例中,我无法使其工作: 我使用的是所见即所得文本编辑器(textAngular)。我已经为用户提供了在光标位置插入交叉引用的功能。他们单击一个按钮,打开一个对话框供他们选择,然后在当前光标位置插入一个html节点 光标的位置可以在div内的子节点内,例如p标记和/或其他格式标记 我的问题是,当对话框获得焦点时,当前光标位置丢失。在打开对话框之前,我曾尝试将插入符号位置(节点和偏移量
我的问题是,当对话框获得焦点时,当前光标位置丢失。在打开对话框之前,我曾尝试将插入符号位置(节点和偏移量)存储在内存中,但无论我尝试什么,插入符号位置都会返回到div的开头。我尝试了stackoverflow上可以找到的所有代码片段,但都不起作用。我想我遗漏了什么。编辑:再想一想,你的问题可能是当你点击按钮时,可编辑的内容失去了焦点,因此选择丢失了。我们在textAngular中处理这个问题:
toolElement.attr('unselectable','on')代码>
最好的解决方案是使用rangy,而不是自己滚动(textAngular ^1.3.0中需要)
您可能被否决了,因为这与内容可编辑内容中有关“保存和恢复”插入符号位置的问题非常相似,例如
对于textAngular,我们已经多次处理了这个问题,并且在TA(textAngular)工具栏工具中内置了一些快捷方式和帮助程序。
请查看此处的任何问题:
如果您有特定于TA的问题,通常最好查看github存储库中的500多个问题。很可能以前也尝试过类似的方法。从这个答案:
根据您的用例进行修改。按下组合键ctrl+i
时,会出现一个弹出窗口。您与弹出窗口交互并按下关闭按钮,然后光标位置将返回到其原始位置
没有任何其他代码,这就是我必须继续下去的原因。
我使用jquery来减少编写示例的冗长,但在没有jquery的情况下也可以这样做
函数getRestorePosition(上下文){
var selection=window.getSelection();
var range=selection.getRangeAt(0);
range.setStart(上下文,0);
var len=range.toString().length;
返回函数restore(){
var pos=getTextNodeAtPosition(上下文,len);
selection.removeAllRanges();
变量范围=新范围();
范围设置开始(位置节点、位置位置);
选择。添加范围(范围);
}
}
函数getTextNodeAtPosition(根,索引){
var lastNode=null;
var treeWalker=document.createTreeWalker(根、节点过滤器、显示文本、函数下一步(elem){
if(index>elem.textContent.length){
索引-=elem.textContent.length;
lastNode=elem;
返回NodeFilter.FILTER\u拒绝
}
返回NodeFilter.FILTER\u接受;
});
var c=treeWalker.nextNode();
返回{
节点:c?c:根,
职位:c?索引:0
};
}
$('[contenteditable=“true”]')。在('keydown',函数(e)上{
如果(e.ctrlKey&&e.which==73){
var popup=$(“#popup”);
var restore=getRestorePosition(即目标);
popup.show();
popup.find('button').one('click',function(){
popup.hide();
恢复();
});
e、 预防默认值();
返回false;
}
});代码>
#弹出窗口{
位置:绝对位置;
背景色:rgba(100100,0.8);
左:0px;
右:0px;
底部:0px;
顶部:0px;
显示:无;
颜色:白色;
文本对齐:居中;
填充:0px;200px;
字号:3em;
}
[contenteditable=“true”]{
边框:1px纯色灰色;
填充:20px;
字号:2em;
}
如果一只土拨鼠能扔木头,它能扔多少木头
一只美洲旱獭能扔的木头和一只美洲旱獭能扔的木头一样多
关闭
我可以看出,这项提案已经被否决。很可能人们对这个问题不太清楚,或者我可能遗漏了一些明显的东西,所以如果是这样的话,请在这里留下评论,我会纠正它。如果你觉得这个问题已经得到了回答,那么请告诉我答案,我将删除这个问题。没有理由就简单地否决它是无济于事的。