0

嘿 Stackoverflow 社区,

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

问题是如何取消粗体文本。

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

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

任何帮助深表感谢 :)

4

2 回答 2

2

按下特定样式按钮时,如何使用 javascript 循环选择字符串。您只需将几个标签(如, , ....)保存在一个数组中,然后循环遍历您选择的特定字符串。因此,您甚至可以在找到任何标签时更改样式按钮的样式,以让用户知道刚刚使用了哪种样式。取消选择样式后,再次循环并从字符串中删除标签。

于 2012-06-28T09:43:54.230 回答
2

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

<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 类应用程序模块。

于 2012-06-28T10:08:36.957 回答