我正在尝试通过contenteditable
在 Div 元素上使用来创建一个小的 Richtexteditor,但我遇到了一个问题:
我希望能够更改fontSize
当前选择的值,但是当我使用数字输入字段时,我会丢失当前选择,因此document.execCommand('fontSize,false,myNumberValue)
无法正常工作。使用<button>
元素来执行命令确实有效,但我宁愿使用数字字段,我的选择是什么?
我正在尝试通过contenteditable
在 Div 元素上使用来创建一个小的 Richtexteditor,但我遇到了一个问题:
我希望能够更改fontSize
当前选择的值,但是当我使用数字输入字段时,我会丢失当前选择,因此document.execCommand('fontSize,false,myNumberValue)
无法正常工作。使用<button>
元素来执行命令确实有效,但我宁愿使用数字字段,我的选择是什么?
我也遇到过这个问题。这很痛苦,但除了像 Erik 提到的那样保存/恢复选择之外,我根本找不到解决它的方法。
一种可能的解决方法是将输入放在模态框内,以便它使 contenteditable 区域变灰,但即便如此,它仍然只是一种解决方法。只是帮助用户体验。
这是我用来做非常相似的事情的一个小片段。
saveSelection : function(){
var sel = window.getSelection(), ranges = [];
if (sel.rangeCount) {
for (var i = 0, len = sel.rangeCount; i < len; ++i) {
ranges.push(sel.getRangeAt(i));
}
}
return ranges;
},
restoreSelection : function(savedSel){
var sel = window.getSelection();
sel.removeAllRanges();
for (var i = 0, len = savedSel.length; i < len; ++i) {
sel.addRange(savedSel[i]);
}
}
这似乎适用于我的大多数现代浏览器(Chrome、Safari、IE9+),但如果您需要它来支持旧版浏览器,您可能需要查看 Rangy - https://code.google.com/p/rangy/