设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2035|回复: 5
打印 上一主题 下一主题

[多媒体] 浅谈DOM之五:处理节点(1)

[复制链接]
跳转到指定楼层
1#
发表于 2015-7-6 17:28:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 roych 于 2015-7-7 12:01 编辑

       先说点题外话吧。事实上写这个系列,应该是一件吃力不讨好的事情。大部分版友可能会觉得:一是没必要在Access里弄DOM,二是觉得要么在服务器端弄DOM。针对这两种意见,我想说说我的初衷吧。       其实,在开篇里我已经提到过了,这个系列的主要目的在于:一是照顾有网抓需要的版友,二是照顾需要使用Web UI的版友。事实上,我没打算非要给前端工程师看,而且这个系列也不适合,毕竟前端工程师应该学JavaScript,而不是VBA。好了,现在我们继续:

       前面说过了,我们可以通过修改InnerHTML来增删改节点,也可以通过appendChild、removeChild,replaceChild等方法来完成同样的操作。我们先来一个简单点的循环:
  1. Private Sub cmdCreateElement_Click()
  2. Dim wb As WebBrowser
  3. Dim doc As HTMLDocument
  4. '定义一个元素数组
  5. Dim p(1 To 10)  As IHTMLElement
  6. '定义文本节点
  7. Dim nodeText As IHTMLDOMNode
  8. Dim i As Long

  9. Set wb = Me.WebBrowser0.Object
  10. Set doc = wb.Document
  11. For i = 1 To 10
  12. '创建P元素
  13.     Set p(i) = doc.createElement("p")
  14. '创建文本节点
  15.     Set nodeText = doc.createTextNode("我是新来的" & i)
  16. '将文本节点附到P元素上
  17.     p(i).appendChild nodeText
  18. '再将已经包含文本的P节点添加到BODY上
  19.     doc.querySelector("body").appendChild p(i)
  20. Next

  21. End Sub
复制代码
      关于上述的语句,有专家说,由于处理节点时,浏览器需要一次次去渲染,会耗费大量资源。不过也有人认为,用DocumentFragment与这相比并没有太大差异。这个问题我们后面再讨论。
       接下来,我们再来一个复杂点的。将数据显示在表格中:
  1. Private Sub cmdCreateElement_Click()
  2. Dim wb As WebBrowser
  3. Dim doc As HTMLDocument
  4. '定义表格的行(tr)跟列(td)
  5. Dim td  As IHTMLElement
  6. Dim tr() As IHTMLElement
  7. Dim nodeText As IHTMLDOMNode
  8. '定义记录集
  9. Dim rst As New ADODB.Recordset
  10. '定循环变量i和outerHTML文本
  11. Dim i As Long
  12. Dim s As String

  13. rst.Open "select 商品ID,商品名称,结算金额 from 订单数据", CurrentProject.Connection, adOpenKeyset, adLockOptimistic

  14. Set wb = Me.WebBrowser0.Object
  15. Set doc = wb.Document
  16. '重定义数组
  17. ReDim tr(1 To rst.RecordCount)
  18. i = 1

  19. Do Until rst.EOF
  20.     Set tr(i) = doc.createElement("tr")
  21.     For j = 0 To rst.Fields.Count - 1
  22.     '创建单元格
  23.         Set td = doc.createElement("td")
  24.     '创建文本节点
  25.         Set nodeText = doc.createTextNode(rst(j))
  26.     '将文本节点依次附加到单元格之上,得到:<td>rst(0)</td><td>rst(1)</td><td>rst(2)</td>
  27.         td.appendChild nodeText
  28.     '将td附加到tr上。
  29.         tr(i).appendChild td
  30.     Next
  31. '读取外部HTML代码
  32. s = s & tr(i).outerHTML
  33. '循环
  34. i = i + 1
  35. rst.MoveNext
  36. Loop
  37. doc.querySelector("body").innerHTML = "<table border=""1"">" & s & "</table>"
  38. End Sub
复制代码
上一节 下一节

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2015-7-6 17:31:23 | 只看该作者
系列文章。赞一个
3#
 楼主| 发表于 2015-7-6 17:36:06 | 只看该作者
admin 发表于 2015-7-6 17:31
系列文章。赞一个

既然讲了,就尽量讲透一些。不过JavaScript的DOM跟VBA里的DOM还是有些差异。例如部分appendChild就是IHTMLElement里的隐藏方法(即无提示,只能手动输入这个方法)。

点击这里给我发消息

4#
发表于 2015-7-6 17:40:42 | 只看该作者
赞一个!
回复

使用道具 举报

点击这里给我发消息

5#
发表于 2015-7-6 18:29:30 | 只看该作者
大师都已经拼合ACCESS和HTML了,我还一直晕HTML,研究有一段时间了,还停留在改别人现成的。
留个记号跟帖……
6#
发表于 2015-7-6 20:17:34 | 只看该作者
赞一个
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-26 08:32 , Processed in 0.076581 second(s), 30 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表