2009-02-16 47 views
6

Trong điều khiển WebBrowser, làm cách nào để xóa HtmlElement đối tượng? Không có phương thức nào trong lớp HtmlElement để thực hiện việc này. Để giải quyết sự cố này, tôi có thể tạo một "giả" HtmlElement (mà không chèn nó vào HtmlDocument), sau đó tôi chèn (qua AppendChild) các đối tượng cần xóa HtmlElement. Điều này cảm thấy như một hack. Có cách nào tốt hơn để làm điều này?Xóa đối tượng HtmlElement bằng cách lập trình bằng C#

P.S. Tôi muốn giữ lại HtmlElement trong bộ nhớ để sử dụng sau này, không chỉ đơn giản là tiêu diệt nó (đó là những gì thiết lập của nó là innerHtml cho một chuỗi rỗng sẽ làm)

Trả lời

1

Có một phương pháp gọi là IHTMLDOMNode::removeNode trông giống như cách "chính thức" để thực hiện việc này, nhưng đây không phải là mã không được quản lý trong mshtml.dll. Tôi đang tìm một cái gì đó phù hợp hơn cho C#.

2

Bạn có thể xóa phần tử bằng cách đặt outerhtml thành chuỗi rỗng.

elem.OuterHtml = ""

Tôi hy vọng đây là những gì bạn đang tìm kiếm.

gm

+0

Không [luôn] làm việc với Internet Explorer 6. Thẻ bazơ, ví dụ, chống lại phương pháp này. – user38329

3

Thêm một tham chiếu đến Microsoft.mshtml (từ tab 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

Cảm ơn, điều này khiến tôi có thể hình dung ra. Mã của tôi hoạt động với: HTMLDocument htmlDoc = (HTMLDocument) webBrowser1.Document.DomDocument; IHTMLElement tmpElement = htmlDoc.getElementById ("xBar"); IHTMLDOMNode tmpNode = (IHTMLDOMNode) tmpElement; tmpNode.parentNode.removeChild (tmpNode); – Xantix

+0

Ngoài ra, bạn có thể sử dụng từ khóa động để lưu phép đúc rõ ràng mọi thứ, nhưng sau đó bạn không nhận được xác minh thời gian biên dịch mà các phương thức tồn tại. – Xantix

Các vấn đề liên quan