IHTMLTxtRange.pasteHTML 不会替换旧的 HTML
我正在使用 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>
位于第二个分配之后。
我做错了什么?我错过了什么吗?
I'm writing a simple HTML WYSIWYG editor using Microsoft's mshtml. One of the features should be selecting a header type (e.g. h1, h2, h3) for a selected text. The first assignment is no problem with the following code:
// *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);
When I try to change the header, the old one doesn't get replaced though MSDN says about pasteHTML:
Pastes HTML text into the given text
range, replacing any previous text and
HTML elements in the range.
This means if my HTML was
<H1>foo</H1>
after the first assignment, it gets
<H1>
<H2>asdasd</H2></H1>
after the second.
What am I doing wrong? Am I missing something?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您是否尝试过将最后一行更改为
?
我认为 externalHTML 将包含原始的 h1 标签,然后您将粘贴
OVER
Have you tried changing the last line to
?
I think the outerHTML would include the original h1 tag, and then you would paste
OVER
我遇到了同样的问题并通过解决了它
I had the same problem and solved it via
清除选择即可:
Clearing the selection will do it: