vba取得当前元素的值

如下图我要取得当前元素a的值67896.由于这个网页不是很标准..值没有包含在元素里,无法直接取到。当然要是用正则或者split这种肯定是能解决的。 我这里只是学习下jquery的解法。

StrText="<a><span>123</span>67896<span>876</span></a>"

1.我先是用了$('a').text().因为加载的是网络的jquery,第一次运行代码可能会报错,因为要下载js文件,第二次以后直接用缓存了,不会报错。当然你可以把jquery文件放到vba代码所在工作簿的文件夹,然后本地引用也可以。如:Odom.write "<script src='" & ThisWorkbook.Path & "\jquery-1.4.min.js'></script><body></body>",这样就可以了。代码如下,然而并未得到预期的结果:

Sub Test1()
    Dim Odom As Object, oWindow As Object, StrText As String
    Set Odom = CreateObject("htmlfile")
    Set oWindow = Odom.parentWindow
    StrText = "<a><span>123</span>67896<span>876</span></a>"
    Odom.write "<script src='http://ajax.microsoft.com/ajax/jquery/jquery-1.4.min.js'></script><body></body>"
    
    Odom.body.innerHTML = StrText
    MsgBox oWindow.eval("$('a').text()")
End Sub

运行后结果是把所有的包括后代的值都包含在里面了:

然后我又研究学习了下:利用删除后代的方法,找到当前元素的值。jquery写法:$('a').children().remove().end().text().这个在后代比较多的时候应该效率是比较低的。不过vba里面也是够用了,呵呵,解决了问题就是好的。完整的代码如下:

Sub Test2()
Dim Odom As Object, oWindow As Object, StrText As String
    Set Odom = CreateObject("htmlfile")
    Set oWindow = Odom.parentWindow
    StrText = "<a><span>123</span>67896<span>876</span></a>"
    Odom.write "<script src='http://ajax.microsoft.com/ajax/jquery/jquery-1.4.min.js'></script><body></body>"
    
    Odom.body.innerHTML = StrText
MsgBox oWindow.eval("$('a').clone().children().remove().end().text()")
End Sub

运行结果如下,达到了我想要的结果:

后来学习了下。发现遍历节点就可以实现 我的要求。节点的类型有3类。1表示元素,2表示属性,3表示文本。基本我们需要的就是找到nodetype为3的节点就可以了。实现代码如下,没有使用jQuery的写法:

Sub Test3()
Dim Odom As Object, oWindow As Object, StrText As String
    Set Odom = CreateObject("htmlfile")
    Set oWindow = Odom.parentWindow
    StrText = "<a><span>123</span>67896<span>876</span></a>"
    Odom.body.innerHTML = StrText
    Set a = Odom.getElementsByTagName("a")(0) '取得节点a
    For Each e In a.ChildNodes
        If e.NodeType = 3 Then MsgBox e.Data: Exit For
    Next
End Sub

 下面再写一下jQuery的代码:

Sub Test3()
Dim Odom As Object, oWindow As Object, StrText As String
    Set Odom = CreateObject("htmlfile")
    Set oWindow = Odom.parentWindow
    StrText = "<a><span>123</span>67896<span>876</span></a>"
    Odom.write "<script src='http://ajax.microsoft.com/ajax/jquery/jquery-1.4.min.js'></script><body></body>"
    Odom.body.innerHTML = StrText
    MsgBox oWindow.eval("$('a').contents().filter(function(){return this.nodeType==3;}).text()")
End Sub

一样得到了我想要的答案。可惜听说jquery黯然落幕了。希望会出现更好的工具吧、

猜你喜欢

转载自blog.csdn.net/qq_24499417/article/details/81487694