首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在没有任何标记的div之间获取文本?<div class="obj-amount">15</div>

如何在没有任何标记的div之间获取文本?<div class="obj-amount">15</div>
EN

Stack Overflow用户
提问于 2019-07-06 15:10:03
回答 1查看 149关注 0票数 1

我在VBA中有这段代码,我想提取obj-amount div类的'15‘。有什么建议吗?

代码语言:javascript
运行
复制
<div class="obj-amount">15<span class="unit">$</span></div>
代码语言:javascript
运行
复制
Set divtags = oHtml.getElementsByClassName("obj-amount")(0).getElementsByTagName("obj-amount")
i = 0
For Each oElement In divtags
    Sheets("Data").Range("A" & i + 1) = divtags(i).innerText
    i = i + 1
Next oElement
EN

回答 1

Stack Overflow用户

发布于 2019-07-06 16:36:56

返回集合和循环的

您不希望将ByClassNameByTagName链接在一起。其中的选择器仅用于classname,并且足以返回具有该classname的元素集合。

您也不希望在该级别进行索引,如果在循环中使用此类名的所有元素之后。您希望对集合执行For Each操作。然后在循环中使用循环变量oElement;这意味着您可以启动i=1并减少在循环中添加的代码量和调用量。

当然,这将返回驻留在子span标记中的$

避免/删除$(或子span 内容)的方法:

  1. 如果不需要,删除它的最简单方法是在循环期间在.innerText上使用Replace$
  2. 如果文本不是常量,那么您可以在.innerText上用vbNullString替换oElement.children(0).innerText,或者用oElement.getElementsByTagName("span")(0).innertext替换。我认为后者可能是您之后要做的(但它需要在循环中)。在没有replacement.

的情况下,您也可以执行

  • oElement.FirstChild.NodeValue

N.B.

您可以使用哪些方法将取决于您声明divtagsoElement的方式。

长文本版本:

代码语言:javascript
运行
复制
Set divtags = ohtml.getElementsByClassName("obj-amount") '<== collection matched by classname
i = 1
For Each oElement In divtags                 '<== loop each item in collection
    Worksheets("Data").Range("A" & i) = oElement.innerText
    'Worksheets("Data").Range("A" & i) = oElement.FirstChild.NodeValue
    'Worksheets("Data").Range("A" & i) = Replace$(oElement.innerText,"$", vbNullString)  '<==replacement if wanted
    'Worksheets("Data").Range("A" & i) = Replace$(oElement.innerText,oElement.children(0).innerText, vbNullString)  '<==replacement if wanted and first child text not constant
    'Worksheets("Data").Range("A" & i) = Replace$(oElement.innerText,oElement.getElementsByTagName("span")(0).innertext, vbNullString)  '<==replacement if wanted and child span text not constant
    i = i + 1
Next oElement

使用 With 语句和工作表变量提高易读性的:

我可能会将工作表放到一个变量中,并确保使用的是Worksheets集合。我还将使用With语句在循环中保留对oElement的引用,以便使用点访问器.,以提高易读性:

代码语言:javascript
运行
复制
Dim ws As Worksheet

Set ws = ThisWorkbook.Worksheets("Data")
Set divtags = ohtml.getElementsByClassName("obj-amount") 
i = 1
For Each oElement In divtags  
    With oElement
        ws.Range("A" & i) = .FirstChild.NodeValue
        ws.Range("A" & i) = Replace$(.innerText, "$", vbNullString) 'next two lines are alternativeS based on need
        ws.Range("A" & i) = Replace$(.innerText, .Children(0).innerText, vbNullString)
        ws.Range("A" & i) = Replace$(.innerText, .getElementsByTagName("span")(0).innerText, vbNullString) 
    End With
    i = i + 1
Next oElement
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56911995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档