【发布时间】:2014-03-07 06:09:40
【问题描述】:
所以,我正在玩 (AWESOME) Rangy 文本选择包。我正在使用contenteditable=true 编辑span 内的文本,目标是拥有一个允许对每个字符进行单独样式设置的文本输入元素。让我强调最后一点——每个角色都应该在其自己的范围内。如果我不需要保留从一个按键到下一个按键的样式,这很好用——我只是做类似
var newHTML = field.innerText.split('').map(function(c){
return ('<span class="letter">'+c+'</span>');
}).join('');
$(field).empty().append(newHTML);
并使用 Rangy 的 (1.3) saveCharacterRange() 函数恢复选择,一切都很好。
当我已经设置了其中一些跨度的样式时,问题就出现了,我删除了一个,用新文本替换它。我希望新插入的文本没有样式,而是插入到前面的(或后面的,如果选择在开头)范围中。我试图通过在focusNode之后(或之前)显式折叠选择区域来解决此问题,但它似乎不允许endContainer(或startContainer)成为文本节点以外的任何东西......我' 甚至验证我可以创建 一个文本范围,它可以在我想要的位置折叠,但选择对象的setSingleRange() 似乎在文本节点周围折叠回来。
我尝试插入一个新节点并将选择完全放在其中,确实在调用insertNode()之前新节点中有内容时起作用,但我显然不能插入额外的每个字符之间的内容...
这是一个fiddle,展示了我在说什么。感谢您的帮助!
【问题讨论】:
标签: javascript html selection contenteditable rangy