7

我正在调整一个所见即所得的编辑器,并且我正在尝试创建一个图标,该图标将删除h2.

在以前的版本中,以下命令完美运行:

oRTE.document.execCommand("removeformat", false, "");

但是在当前版本中,尽管该命令成功地从选定文本中删除了诸如粗体、下划线、斜体等标签,但它仍然保持h2标签完好无损。

(有趣的是,execCommand("formatblock"...)成功创建了h2标签。)

我在想我将不得不放弃execCommand并寻找另一种方式,但我也认为这不仅仅是一行代码!将不胜感激的建议。

4

3 回答 3

7

您可以将格式更改为 div,这不是最好的解决方案,但它可以工作并且很短:

document.execCommand('formatBlock', false, 'div')

还有其他解决方案可以从选定的文本中获取最近的父级,然后您可以将其展开,请注意,这可以是诸如 <b> 之类的标记:

var container = null;
if (document.selection) //for IE
    container = document.selection.createRange().parentElement();
else {
    var select = window.getSelection();
    if (select.rangeCount > 0)
        container = select.getRangeAt(0).startContainer.parentNode;
}
$(container).contents().unwrap(); //for jQuery1.4+
于 2013-11-09T01:35:08.710 回答
5

这与提议的W3C 编辑 API一致。它有一个格式化元素列表,并且H#没有列出这些元素。这些被认为是结构性的,而不仅仅是格式化。UL删除这些标签比删除or没有任何意义P

于 2012-12-25T08:19:45.687 回答
1

我认为您可以使用Range对象。您可以从 Professional JavaScript for Web Developers 3rd Edition 中找到它。第 12 章(12.4)和第 14 章(14.5)...

那本书的一个例子:

var selection = frames["richedit"].getSelection();

var selectedText = selection.toString();

var range = selection.getRangeAt(0);

var span = frames["richedit"].document.createElement("span");
span.style.backgroundColor = "yellow";
range.surroundContents(span);
于 2015-05-14T03:06:19.487 回答