我正在使用Microsoft的mshtml编写一个简单的HTML WYSIWYG编辑器。其中一个特征应该是为所选文本选择标题类型(例如h1,h2,h3)。第一个赋值对以下代码没有问题:
// *doc* is my IHTMLDocument
// *tag* contains the header tag
IHTMLTxtRange range = (IHTMLTxtRange)doc.selection.createRange()
string rangeText = range.text;
IHTMLElement elem = doc.createElement(tag)
elem.innerHTML = rangeText;
range.pasteHTML(elem.outerHTML);
当我尝试更改标题时,虽然MSDN说到了pasteHTML,但旧的标题不会被替换:
将HTML文本粘贴到给定文本中 范围,替换任何以前的文本和 范围内的HTML元素。
这意味着我的HTML是
<H1>foo</H1>
在第一次分配后,它得到
<H1>
<H2>asdasd</H2></H1>
在第二次之后。
我做错了什么?我错过了什么吗?
答案 0 :(得分:1)
您是否尝试过将最后一行更改为
range.pasteHTML(elem.innerHTML);
? 我认为outerHTML会包含原始的h1标签,然后你会粘贴
<H1><H2>asdasd</H2></H1>
OVER
<H1>foo</H1>
答案 1 :(得分:1)
我有同样的问题并通过
解决了 string rangeText = range.text;
IHTMLDOMNode parentNode = range.parentElement() as IHTMLDOMNode;
if (parentNode.nodeName.Contains("H") && parentNode.nodeName.Length == 2)
{
parentNode.removeNode(true);
}
IHTMLElement elem = doc.createElement(tag);
elem.innerHTML = rangeText;
range.pasteHTML(elem.outerHTML);
答案 2 :(得分:0)
清除选择将执行此操作:
IHTMLTxtRange range = (IHTMLTxtRange)doc.selection.createRange();
string rangeText = range.text;
doc.selection.clear();
IHTMLElement elem = doc.createElement(tag);
elem.innerHTML = rangeText;
range.pasteHTML(elem.outerHTML);