我正在调整一个所见即所得的编辑器,我正在尝试创建一个图标来删除h2
的所选文本。
在以前的版本中,以下命令运行正常:
oRTE.document.execCommand("removeformat", false, "");
但是在当前版本中,尽管该命令成功地从选定文本中删除了粗体,下划线,斜体等标记,但它保留了h2
标记。
(有趣的是,execCommand("formatblock"...)
成功创建了h2
代码。)
我在想我将不得不放弃execCommand
并找到另一种方式,但我也认为它不仅仅是一行代码!将不胜感激的建议。
答案 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#
元素。这些被认为是结构性的,不仅仅是格式化删除这些标记与删除UL
或P
相比没有任何意义。
答案 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);