您需要考虑用户的选择跨越段落的情况。例如(用管道表示的选择边界):
<p>One <b>t|wo</b></p>
<p>Thr|ee</p>
要处理此问题,您需要将用户选择中的所有文本节点和部分文本节点包装在<b>
标签中,同时还要检测哪些文本节点已经是粗体并不理会它们。这不是微不足道的,document.execCommand()
它会为您处理一切,就像大型 WYSIWYG 编辑器一样。
大多数浏览器允许在样式模式之间切换,允许您在使用元素的样式之间进行选择,例如<b>
和<i>
或使用<span>
具有样式属性的元素进行样式设置。您可以使用“StyleWithCSS”命令执行此操作,在旧浏览器中回退到“UseCSS”。以下切换命令以使用非 CSS 版本:
try {
if (!document.execCommand("StyleWithCSS", false, useCss)) {
// The value required by UseCSS is the inverse of what you'd expect
document.execCommand("UseCSS", false, !useCss);
}
} catch (ex) {
// IE doesn't recognise these commands and throws.
}
最后,如果你改用 CSS 类而不是<b>
etc.,你可以使用我Rangy库的CSS 类应用程序模块。