|
本帖最后由 roych 于 2015-7-7 12:01 编辑
先说点题外话吧。事实上写这个系列,应该是一件吃力不讨好的事情。大部分版友可能会觉得:一是没必要在Access里弄DOM,二是觉得要么在服务器端弄DOM。针对这两种意见,我想说说我的初衷吧。 其实,在开篇里我已经提到过了,这个系列的主要目的在于:一是照顾有网抓需要的版友,二是照顾需要使用Web UI的版友。事实上,我没打算非要给前端工程师看,而且这个系列也不适合,毕竟前端工程师应该学JavaScript,而不是VBA。好了,现在我们继续:
前面说过了,我们可以通过修改InnerHTML来增删改节点,也可以通过appendChild、removeChild,replaceChild等方法来完成同样的操作。我们先来一个简单点的循环:
- Private Sub cmdCreateElement_Click()
- Dim wb As WebBrowser
- Dim doc As HTMLDocument
- '定义一个元素数组
- Dim p(1 To 10) As IHTMLElement
- '定义文本节点
- Dim nodeText As IHTMLDOMNode
- Dim i As Long
- Set wb = Me.WebBrowser0.Object
- Set doc = wb.Document
- For i = 1 To 10
- '创建P元素
- Set p(i) = doc.createElement("p")
- '创建文本节点
- Set nodeText = doc.createTextNode("我是新来的" & i)
- '将文本节点附到P元素上
- p(i).appendChild nodeText
- '再将已经包含文本的P节点添加到BODY上
- doc.querySelector("body").appendChild p(i)
- Next
- End Sub
复制代码 关于上述的语句,有专家说,由于处理节点时,浏览器需要一次次去渲染,会耗费大量资源。不过也有人认为,用DocumentFragment与这相比并没有太大差异。这个问题我们后面再讨论。
接下来,我们再来一个复杂点的。将数据显示在表格中:
- Private Sub cmdCreateElement_Click()
- Dim wb As WebBrowser
- Dim doc As HTMLDocument
- '定义表格的行(tr)跟列(td)
- Dim td As IHTMLElement
- Dim tr() As IHTMLElement
- Dim nodeText As IHTMLDOMNode
- '定义记录集
- Dim rst As New ADODB.Recordset
- '定循环变量i和outerHTML文本
- Dim i As Long
- Dim s As String
- rst.Open "select 商品ID,商品名称,结算金额 from 订单数据", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
- Set wb = Me.WebBrowser0.Object
- Set doc = wb.Document
- '重定义数组
- ReDim tr(1 To rst.RecordCount)
- i = 1
- Do Until rst.EOF
- Set tr(i) = doc.createElement("tr")
- For j = 0 To rst.Fields.Count - 1
- '创建单元格
- Set td = doc.createElement("td")
- '创建文本节点
- Set nodeText = doc.createTextNode(rst(j))
- '将文本节点依次附加到单元格之上,得到:<td>rst(0)</td><td>rst(1)</td><td>rst(2)</td>
- td.appendChild nodeText
- '将td附加到tr上。
- tr(i).appendChild td
- Next
- '读取外部HTML代码
- s = s & tr(i).outerHTML
- '循环
- i = i + 1
- rst.MoveNext
- Loop
- doc.querySelector("body").innerHTML = "<table border=""1"">" & s & "</table>"
- End Sub
复制代码 上一节 下一节
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|