Office中国论坛/Access中国论坛

标题: 浅谈DOM之七:处理节点(3) [打印本页]

作者: roych    时间: 2015-7-7 17:59
标题: 浅谈DOM之七:处理节点(3)
本帖最后由 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
复制代码
      上一节 下一节
[attach]56765[/attach]






欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3