2009-02-16 5 views
6

En un control WebBrowser, ¿cómo elimino los objetos HtmlElement? No hay métodos en la clase HtmlElement para lograr esto. Como solución alternativa, puedo crear un "ficticio" HtmlElement (sin insertarlo en el HtmlDocument), en el cual inserto (a través de AppendChild) los objetos HtmlElement que se eliminarán. Esto se siente como un truco. ¿Hay una mejor manera de hacer esto?Eliminando objetos HtmlElement programáticamente usando C#

P.S. Quiero retener el HtmlElement en la memoria para su uso posterior, no simplemente destruirlo (que es lo que el establecimiento de innerHtml su matriz en una cadena vacía haría)

Respuesta

1

Hay un método llamado IHTMLDOMNode::removeNode que se ve como la forma "oficial" de hacer esto, pero este es código no administrado en mshtml.dll. Estoy buscando algo más adecuado para C#.

2

Puede eliminar el elemento estableciendo su outerhtml en una cadena vacía.

elem.OuterHtml = ""

espero que esto es lo que estabas buscando.

gm

+0

No [siempre] funciona con Internet Explorer 6. La etiqueta de base, por ejemplo, resiste este método. – user38329

3

agregar una referencia a Microsoft.mshtml (desde la pestaña .Net)

using Microsoft.mshtml; 
.... 
{ 
... 
    // To Remove  
    HTMLDocumentClass htmldoc = wbCtrl.Document.DomDocument as HTMLDocumentClass; 
    IHTMLDOMNode node = htmldoc.getElementById("xBar") as IHTMLDOMNode; 
    node.parentNode.removeChild(node); 
... 
} 
+0

Gracias, esto me permitió descifrarlo. Mi código funciona con: HTMLDocument htmlDoc = (HTMLDocument) webBrowser1.Document.DomDocument; IHTMLElement tmpElement = htmlDoc.getElementById ("xBar"); IHTMLDOMNode tmpNode = (IHTMLDOMNode) tmpElement; tmpNode.parentNode.removeChild (tmpNode); – Xantix

+0

Alternativamente, puede usar la palabra clave dinámica para guardar la conversión explícita de todo, pero luego no obtiene la verificación del tiempo de compilación de que existen los métodos. – Xantix

Cuestiones relacionadas