Web 浏览器查找 html 元素中文本的对话框
Webbrowser find dialog for a text within an html element
我尝试在我的 webbroser 控件中使用查找对话框功能,它应该搜索几个词(向前)并突出显示它们。
我尝试了 this MSDN question
中的以下代码
private bool FindFirst(string text)
{
IHTMLDocument2 doc = (IHTMLDocument2)browserInstance.Document;
IHTMLSelectionObject sel = (IHTMLSelectionObject)doc.selection;
sel.empty(); // get an empty selection, so we start from the beginning
IHTMLTxtRange rng = (IHTMLTxtRange)sel.createRange();
if (rng.findText(text, 1000000000, 0))
{
rng.select();
return true;
}
return false;
}
但是这段代码和原始问题中的代码搜索整个文档并使用 range = body.createTextRange()
创建一个范围,我想在特定元素内搜索(例如只搜索特定 [= 中的文本13=])
我该怎么做?
我通过在代码中添加 moveToElementText(..) 解决了这个问题。它移动文本范围,使范围的开始和结束位置包含给定元素中的文本。
bool FindFirst(HtmlElement elem, string text)
{
if (elem.Document != null)
{
IHTMLDocument2 doc =
elem.Document.DomDocument as IHTMLDocument2;
IHTMLSelectionObject sel = doc.selection as IHTMLSelectionObject;
sel.empty();
IHTMLTxtRange rng = sel.createRange() as IHTMLTxtRange;
// MoveToElement causes the search begins from the element
rng.moveToElementText(elem.DomElement as IHTMLElement);
if (rng.findText(text, 1000000000, 0))
{
rng.select();
rng.scrollIntoView(true);
return true;
}
}
return false;
}
public bool FindNext(HtmlElement elem, string text)
{
if (elem.Document != null)
{
IHTMLDocument2 doc =
elem.Document.DomDocument as IHTMLDocument2;
IHTMLSelectionObject sel = doc.selection as IHTMLSelectionObject;
IHTMLTxtRange rng = sel.createRange() as IHTMLTxtRange;
rng.collapse(false);
if (rng.findText(text, 1000000000, 0))
{
rng.select();
rng.scrollIntoView(true);
return true;
}
}
return false;
}
我尝试在我的 webbroser 控件中使用查找对话框功能,它应该搜索几个词(向前)并突出显示它们。 我尝试了 this MSDN question
中的以下代码 private bool FindFirst(string text)
{
IHTMLDocument2 doc = (IHTMLDocument2)browserInstance.Document;
IHTMLSelectionObject sel = (IHTMLSelectionObject)doc.selection;
sel.empty(); // get an empty selection, so we start from the beginning
IHTMLTxtRange rng = (IHTMLTxtRange)sel.createRange();
if (rng.findText(text, 1000000000, 0))
{
rng.select();
return true;
}
return false;
}
但是这段代码和原始问题中的代码搜索整个文档并使用 range = body.createTextRange()
创建一个范围,我想在特定元素内搜索(例如只搜索特定 [= 中的文本13=])
我该怎么做?
我通过在代码中添加 moveToElementText(..) 解决了这个问题。它移动文本范围,使范围的开始和结束位置包含给定元素中的文本。
bool FindFirst(HtmlElement elem, string text)
{
if (elem.Document != null)
{
IHTMLDocument2 doc =
elem.Document.DomDocument as IHTMLDocument2;
IHTMLSelectionObject sel = doc.selection as IHTMLSelectionObject;
sel.empty();
IHTMLTxtRange rng = sel.createRange() as IHTMLTxtRange;
// MoveToElement causes the search begins from the element
rng.moveToElementText(elem.DomElement as IHTMLElement);
if (rng.findText(text, 1000000000, 0))
{
rng.select();
rng.scrollIntoView(true);
return true;
}
}
return false;
}
public bool FindNext(HtmlElement elem, string text)
{
if (elem.Document != null)
{
IHTMLDocument2 doc =
elem.Document.DomDocument as IHTMLDocument2;
IHTMLSelectionObject sel = doc.selection as IHTMLSelectionObject;
IHTMLTxtRange rng = sel.createRange() as IHTMLTxtRange;
rng.collapse(false);
if (rng.findText(text, 1000000000, 0))
{
rng.select();
rng.scrollIntoView(true);
return true;
}
}
return false;
}