Javascript:execCommand(“removeformat”)不会删除h2标记

时间:2012-12-25 07:56:55

标签: javascript

我正在调整一个所见即所得的编辑器,我正在尝试创建一个图标来删除h2的所选文本。

在以前的版本中,以下命令运行正常:

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

但是在当前版本中,尽管该命令成功地从选定文本中删除了粗体,下划线,斜体等标记,但它保留了h2标记。

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

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

3 个答案:

答案 0 :(得分:4)

您可以将格式更改为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+

答案 1 :(得分:3)

这符合建议的W3C Editing APIs。它有一个格式元素列表,未列出H#元素。这些被认为是结构性的,不仅仅是格式化删除这些标记与删除ULP相比没有任何意义。

答案 2 :(得分:1)

我认为您可以使用范围对象。 你可以从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);