vba取得当前元素的值

本文介绍了如何使用VBA结合jQuery从不标准网页中提取特定元素的值。当元素值不直接包含在元素内时,作者尝试了多种方法,包括使用`$('a').text()`、删除后代元素以获取当前值以及遍历节点寻找nodetype为3(文本节点)的方法。最终,作者展示了成功获取元素值的VBA代码,同时对jQuery的未来表达了期待。

如下图我要取得当前元素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黯然落幕了。希望会出现更好的工具吧、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值