vb.net WebBrowser页面与WinForm交互技巧
到此为止,简单的查找就搞定了。至于替换功能,看了下一个例子,我相信你就可以触类旁通轻松搞定了。 首先想到的可能是直接修改HTML文本吧……但是,与SourceCode的高亮显示不同,我们需要并且只需要高亮页面中的文本部分。HTML标签、脚本代码等等是绝对不应该去改动的。因此我们不能把整个页面的Source Code读进来然后replace,那样有破坏HTML文件结构的可能;我们只能在能够分离出文本与其他内容(标签,脚本……)的前提下进行。 方法一:使用TextRange(IHTMLTxtRange) { //定义高亮显示效果的标签。 stringtagBefore="<spanstyle='background-color:yellow;color:black'>" ; stringtagAfter="</span>" ; //…… privatevoidbtnHilight_Click(object sender,EventArgse) { HtmlDocumenthtmlDoc= webBrowser.Document; stringkeyword= txtKeyword.Text.Trim(); if (keyword == "") return; objectoTextRange=htmlDoc.Body.InvokeMember("createTextRange" ); mshtml.IHTMLTxtRangetxtrange=oTextRangeas mshtml.IHTMLTxtRange; while(txtrange.findText(keyword,4 )) { try { txtrange.pasteHTML(tagBefore+keyword+ tagAfter); } catch {} txtrange.collapse(false ); } } }
{ //…… privatevoidbtnHilight_Click(object sender,EventArgse) { HTMLDocumentdocument= (HTMLDocument)webBrowser.Document.DomDocument; IHTMLDOMNodebodyNode= (IHTMLDOMNode)webBrowser.Document.Body.DomElement; stringkeyword= txtKeyword.Text.Trim(); if(keyword=="" ) return ; HilightText(document,bodyNode,keyword); } privatevoidHilightText(HTMLDocumentdocument,IHTMLDOMNodenode,string keyword) { //nodeType=3:text节点 if(node.nodeType==3 ) { stringnodeText= node.nodeValue.ToString(); //如果找到了关键字 if (nodeText.Contains(keyword)) { IHTMLDOMNodeparentNode= node.parentNode; //将关键字作为分隔符,将文本分离,并逐个添加到原text节点的父节点 string[]result=nodeText.Split(newstring []{keyword},StringSplitOptions.None); for(inti=0;i<result.Length-1;i++ ) { if(result[i]!="" ) { IHTMLDOMNodetxtNode= document.createTextNode(result[i]); parentNode.insertBefore(txtNode,node); } IHTMLDOMNodeorgNode= document.createTextNode(keyword); IHTMLDOMNodehilightedNode=(IHTMLDOMNode)document.createElement("SPAN" ); IHTMLStylestyle= ((IHTMLElement)hilightedNode).style; style.color="black" ; style.backgroundColor="yellow" ; hilightedNode.appendChild(orgNode); parentNode.insertBefore(hilightedNode,node); } if(result[result.Length-1]!="" ) { IHTMLDOMNodepostNode=document.createTextNode(result[result.Length-1 ]); parentNode.insertBefore(postNode,node); } parentNode.removeChild(node); }//EndofnodeText.Contains(keyword) } else { //如果不是text节点,则递归搜索其子节点 IHTMLDOMChildrenCollectionchildNodes=node.childNodesas IHTMLDOMChildrenCollection; foreach(IHTMLDOMNodenin childNodes) { HilightText(document,n,keyword); } } } } (编辑:青岛站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |