2009-02-16 18 views
6

Jak można usunąć obiekty HtmlElement w formancie WebBrowser? Nie ma metod w klasie HtmlElement, aby to osiągnąć. Aby obejść ten problem, można utworzyć "manekina" HtmlElement (bez wstawiania go do HtmlDocument), do którego następnie wstawiam (przez AppendChild) obiekty, które mają zostać usunięte. To wygląda jak włamanie. Czy jest lepszy sposób to zrobić?Usuwanie obiektów HtmlElement programowo za pomocą C#

P.S. Chcę zachować HtmlElement w pamięci w celu późniejszego wykorzystania, a nie po prostu zniszczyć (czego ustawienie jej rodziców innerHtml na pusty ciąg zrobi)

Odpowiedz

1

Istnieje metoda o nazwie IHTMLDOMNode::removeNode, która wygląda jak "oficjalny" sposób, aby to zrobić, ale jest to kod niezarządzany w mshtml.dll. Szukam czegoś bardziej odpowiedniego dla C#.

2

Możesz usunąć ten element, ustawiając jego outerhtml na pusty ciąg.

elem.OuterHtml = ""

Mam nadzieję, że to jest to, czego szukali.

gm

+0

Nie [zawsze] pracować z Internet Explorer 6. Znacznik zasady, na przykład, jest odporny Ta metoda. – user38329

3

Dodaj odwołanie do Microsoft.mshtml (od karcie .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

Dzięki, udało mi się to rozgryźć. Mój kod działa z: HTMLDocument htmlDoc = (HTMLDocument) webBrowser1.Document.DomDocument; IHTMLElement tmpElement = htmlDoc.getElementById ("xBar"); IHTMLDOMNode tmpNode = (IHTMLDOMNode) tmpElement; tmpNode.parentNode.removeChild (tmpNode); – Xantix

+0

Można również użyć dynamicznego słowa kluczowego, aby zapisać jawne rzutowanie wszystkiego, ale wtedy nie otrzymasz weryfikacji czasu kompilacji, że istnieją metody. – Xantix

Powiązane problemy