设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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

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

       接下来介绍下克隆子节点(cloneNode)、替换子节点(replaceChild)和移除子节点(removeChild)。cloneNode是对子节点进行克隆操作,replaceChild和removeChild则是由父节点对子节点进行操作的。也就是说,除了自身可以被复制之外,并不能直接移除或者修改自身。这一点需要清楚。
       克隆节点语法如下:子节点.cloneNode(布尔值)。参数默认为FALSE,表示只克隆节点,改为TRUE则表示克隆节点和文本。为避免意外,建议写的时候还是不要忽略参数为好。
  1. Private Sub cmdCloneNode_Click()
  2. Dim wb As WebBrowser
  3. Dim doc As HTMLDocument
  4. Dim newNode As IHTMLDOMNode

  5. Set wb = Me.WebBrowser0.Object
  6. Set doc = wb.Document
  7. 'TRUE:克隆文本和节点,FALSE:只克隆节点,不克隆文本。
  8. If Me.Frame14.Value = 1 Then
  9.     Set newNode = doc.querySelector("body").lastChild.cloneNode(False)
  10. Else
  11.     Set newNode = doc.querySelector("body").lastChild.cloneNode(True)
  12. End If
  13. '克隆完之后还是要加到节点上的。
  14. doc.querySelector("body").appendChild newNode
  15. Me.lblHTML.Caption = "当前BODY的HTML:" & vbCrLf & doc.querySelector("body").innerHTML
  16. End Sub
复制代码
      replaceChild则有两个参数。语法如下:父节点.replaceChild 新的子节点, 旧的子节点。值得注意的是,如果不使用新的DOM元素,则会移除旧的DOM元素。而且定义的变量也是不一样的。如果将节点替换为文本,那么应定义为IHTMLDOMNode类型。否则,则应定义为IHTMLElement,然后通过创建元素,设置innerText来(这里不支持TextContent)处理。
  1. Private Sub cmdReplaceNode_Click()
  2. Dim wb As WebBrowser
  3. Dim doc As HTMLDocument
  4. Dim newNode As IHTMLDOMNode
  5. Dim newEle As IHTMLElement

  6. Set wb = Me.WebBrowser0.Object
  7. Set doc = wb.Document

  8. If Me.Frame14.Value = 1 Then
  9.     Set newNode = doc.createTextNode("我是新节点哦")
  10.     doc.querySelector("body").replaceChild newNode, doc.querySelector("body").lastChild
  11. Else
  12.     Set newEle = doc.createElement("span")
  13.     newEle.innerText = "我也是新节点"
  14.     doc.querySelector("body").replaceChild newEle, doc.querySelector("body").lastChild
  15. End If
  16. Me.lblHTML.Caption = "当前BODY的HTML:" & vbCrLf & doc.querySelector("body").innerHTML
  17. End Sub
复制代码
      关于移除节点。一些书籍上说是可以只移除文本节点,而不移除元素节点的,但是我没有测试成功。语法如下:父节点.removeChild 子节点。
  1. Private Sub cmdRemoveNode_Click()
  2. Dim wb As WebBrowser
  3. Dim doc As HTMLDocument
  4. Dim newNode As IHTMLElement
  5. Set wb = Me.WebBrowser0.Object
  6. Set doc = wb.Document
  7. '只移除最后一个节点
  8. Set newNode = doc.querySelector("body").lastChild
  9. doc.querySelector("body").removeChild newNode
  10. Me.lblHTML.Caption = "当前BODY的HTML:" & vbCrLf & doc.querySelector("body").innerHTML
  11. End Sub
复制代码
      上一节 下一节


本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 06:27 , Processed in 1.899817 second(s), 25 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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