3

我正在使用 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>

在第二个之后。

我究竟做错了什么?我错过了什么吗?

4

3 回答 3

1

您是否尝试过将最后一行更改为

range.pasteHTML(elem.innerHTML);

? 我认为outerHTML会包含原始的h1标签,然后你会粘贴

<H1><H2>asdasd</H2></H1>   

超过

<H1>foo</H1>
于 2010-01-04T20:50:23.183 回答
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); 
于 2014-11-27T18:11:40.947 回答
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); 
于 2011-10-05T16:22:33.507 回答