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则表示克隆节点和文本。为避免意外,建议写的时候还是不要忽略参数为好。
Private Sub cmdCloneNode_Click()
Dim wb As WebBrowser
Dim doc As HTMLDocument
Dim newNode As IHTMLDOMNode
Set wb = Me.WebBrowser0.Object
Set doc = wb.Document
'TRUE:克隆文本和节点,FALSE:只克隆节点,不克隆文本。
If Me.Frame14.Value = 1 Then
Set newNode = doc.querySelector("body").lastChild.cloneNode(False)
Else
Set newNode = doc.querySelector("body").lastChild.cloneNode(True)
End If
'克隆完之后还是要加到节点上的。
doc.querySelector("body").appendChild newNode
Me.lblHTML.Caption = "当前BODY的HTML:" & vbCrLf & doc.querySelector("body").innerHTML
End Sub
复制代码
replaceChild则有两个参数。语法如下:父节点.replaceChild 新的子节点, 旧的子节点。值得注意的是,如果不使用新的DOM元素,则会移除旧的DOM元素。而且定义的变量也是不一样的。如果将节点替换为文本,那么应定义为
IHTMLDOMNode类型。否则,则应定义为
IHTMLElement,然后通过创建元素,设置innerText来(这里不支持
TextContent
)处理。
Private Sub cmdReplaceNode_Click()
Dim wb As WebBrowser
Dim doc As HTMLDocument
Dim newNode As IHTMLDOMNode
Dim newEle As IHTMLElement
Set wb = Me.WebBrowser0.Object
Set doc = wb.Document
If Me.Frame14.Value = 1 Then
Set newNode = doc.createTextNode("我是新节点哦")
doc.querySelector("body").replaceChild newNode, doc.querySelector("body").lastChild
Else
Set newEle = doc.createElement("span")
newEle.innerText = "我也是新节点"
doc.querySelector("body").replaceChild newEle, doc.querySelector("body").lastChild
End If
Me.lblHTML.Caption = "当前BODY的HTML:" & vbCrLf & doc.querySelector("body").innerHTML
End Sub
复制代码
关于移除节点。一些书籍上说是可以只移除文本节点,而不移除元素节点的,但是我没有测试成功。语法如下:父节点.removeChild 子节点。
Private Sub cmdRemoveNode_Click()
Dim wb As WebBrowser
Dim doc As HTMLDocument
Dim newNode As IHTMLElement
Set wb = Me.WebBrowser0.Object
Set doc = wb.Document
'只移除最后一个节点
Set newNode = doc.querySelector("body").lastChild
doc.querySelector("body").removeChild newNode
Me.lblHTML.Caption = "当前BODY的HTML:" & vbCrLf & doc.querySelector("body").innerHTML
End Sub
复制代码
上一节
下一节
[attach]56765[/attach]
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3