如何解开文字?一个小小的WYSIWYG编辑器

时间:2012-06-28 09:33:47

标签: javascript editor wysiwyg bold execcommand

Hey Stackoverflow社区,

有一个方法str.bold()可以在<b></b>标记中包装文本。这对于一个小小的WYSIWYG编辑器来说是完美的(我知道有些人会说我应该采用一个hundrets开源解决方案,但这也是出于学习目的)。

问题是如何解开文本。

这是我的尝试http://jsfiddle.net/Kxmaf/178/

我知道有editor.execCommand('bold', false, '');但这会在每个浏览器上生成不同的HTML结果。我只需要<b></b><i></i><u></u>

非常感谢任何帮助:)

2 个答案:

答案 0 :(得分:2)

当按下特定的样式按钮时,用javascript循环选定的字符串怎么样?你可以在数组中保存像,....这样的几个标签,然后循环遍历你选择的特定字符串。因此,您甚至可以在找到任何标签时更改样式按钮的样式,以便让用户知道刚使用的样式。取消选择样式后,再次循环并从字符串中删除标记。

答案 1 :(得分:2)

您需要考虑用户选择跨越段落的情况。例如(用管道表示的选择边界):

<p>One <b>t|wo</b></p>
<p>Thr|ee</p>

要处理此问题,您需要在<b>标记中包装用户选择内的所有文本节点和部分文本节点,同时还要检测哪些文本节点已经是粗体并且不管它们。这是非常重要的,document.execCommand()为您处理这一切,与所见即所得的大型编辑一样。

大多数浏览器允许在样式模式之间切换,允许您在使用<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>等,则可以使用我的CSS class applier module库的Rangy