通过QWebElement 类可方便 地 访问到 QWebFrame 中的DOM 元素。
QWebElement对象 可轻易地访问到 树型 文档模型 中的DOM 元素 。 这棵树的树 根 被叫做 “ 文档元素 ”, 可使用 QWebFrame::documentElement ()来访问。
可使用 findAll ()和 findFirst ()来找到特定的元素。 这些元素是使用CSS 选择 器来标识的。 以下代码片段演示了 findAll ()的用法。
QWebElement document = frame->documentElement();
/* 假设文档具有 以下结构:
<p class=intro>
<span>Intro</span>
<span>Snippets</span>
</p>
<p>
<span>Content</span>
<span>Here</span>
</p>
*/
QWebElementCollection allSpans = document.findAll("span");
QWebElementCollection introSpans = document.findAll("p.intro span");
第一 个列表包含了文档中所有 的 span 元素。第二 个列表包含了那些属于 p 的下级并且类型为 intro 的 span 元素。
findFirst ()比 findAll ()的效率高得多,它只提取出列表中的第一个元素。
另外 ,妳还可以使用 firstChild ()和 nextSibling ()来手动遍历整个文档:
frame->setHtml("<html><body><p>First Paragraph</p><p>Second Paragraph</p></body></html>");
QWebElement doc = frame->documentElement();
QWebElement body = doc.firstChild();
QWebElement firstParagraph = body.firstChild();
QWebElement secondParagraph = firstParagraph.nextSibling();
可使用像 attribute ()或 setAttribute ()这样的方法来查询 或改变单个元素的内容。例如, 一个浏览器想要记录用户在一个文本区域中的输入并且留待日后使用(自动 填表单 )的话,可以这样:
QWebElement firstTextInput = document.findFirst("input[type=text]");
QString storedText = firstTextInput.attribute("value");
当日后又访问到同一个页面时,浏览器 可通过修改 此 input 元素的value 属性来自动填入文本区域的内容:
QWebElement firstTextInput = document.findFirst("input[type=text]");
textInput.setAttribute("value", storedText);
另一个例子是在一个元素上模拟一次鼠标点击事件。 以下代码演示的是如何调用 一个提交按钮的JavaScript DOM 方法click():
QWebElement document = frame->documentElement();
/* 假设文档具有 以下结构:
<form name="myform" action="submit_form.asp" method="get">
<input type="text" name="myfield">
<input type="submit" value="Submit">
</form>
*/
QWebElement button = document.findFirst("input[type=submit]");
button.evaluateJavaScript("this.click()");
QWebElement 的底层内容是显式共享的。 当妳复制一个QWebElement 的时候,并不会复制其内容。复制 后的对象跟原对象都指向同 一个 元素。
下级元素 的内容可使用 toPlainText ()来转换成纯文本;使用 toInnerXml () 来转换成XHTML。如果 还要在输出内容中包含元素本身的标记的话,就使用 toOuterXml ()。
还可以使用 setPlainText ()和 setInnerXml ()来替换下级元素的内容。 要想同时替换元素本身及其内容的话,就使用 setOuterXml ()。
DOM遍历示例 演示 了如何遍历文档。
简单选择 器示例 可用来试验这个类的搜索功能, 同时妳可将它作为实际项目中的 初 始代码使用。
HxLauncher: Launch Android applications by voice commands