【问题标题】:How to retrieve text content from a HTML markup string?如何从 HTML 标记字符串中检索文本内容?
【发布时间】:2022-01-31 16:45:27
【问题描述】:

我正在检查字符串的值,并将它们与从网格中获得的值进行比较。 但是我得到的文本在实际有用的字符之前有很多不需要的字符。 但它们都以 html 标签结尾,所以我想要做的是削减我从该标签获得的价值。

这是我在字符串中得到的一个例子:

<i class="icon status red"></i>, 1 - deleted

以及我想要的字符串是什么:

1 - deleted

到目前为止,我已经尝试过:

data.forEach((value: any) =>{
((this.array.find(x => x.value === value['field'])).text).split("</i>")
});

这只是删除了标签,但我仍然得到了其余的文本。 我正在寻找一个简短的解决方案,而不是这样的:

list = ["foo","bar","foobar"]

index = list.index("bar")

a = list[index - 1]

b = list[index + 1]

print(a, b)

因为我想直接从字符串而不是列表中剪切。 所以我在想的是我会删除所有正确的东西。有可能吗?

【问题讨论】:

    标签: javascript html string parsing dom


    【解决方案1】:

    为什么要运行 forEach 循环。使用切片和拆分,你可以得到你想要的字符串,给你:

    let string = "<i class='icon status red'></i>, 1 - deleted"
    
    let list = string.split(",")
    
    console.log(list[1])

    【讨论】:

    • 好吧,因为我有更多的价值,然后只是 1 我遍历所有这些值,然后在表格上显示它们。我确实尝试过拆分,但我得到的仍然是相同的字符串,只是没有“,”
    【解决方案2】:

    可以利用DOMParserDOMParser.parseFromString 来访问文本内容...

    function getTextContentFromMarkup(markup) {
      return new DOMParser()
        .parseFromString(markup, "text/html")
        .body
        .textContent;
    }
    
    console.log(
      `getTextContentFromMarkup('<i class="icon status red"></i>, 1 - deleted') ...
      "${ getTextContentFromMarkup('<i class="icon status red"></i>, 1 - deleted')}"`
    );

    上面的脚本可以很容易地适应一种更健壮的方法,它只返回最后一个文本节点的值...

    function getLastTextNodeValueFromMarkup(markup) {
      return [
        ...new DOMParser()
        .parseFromString(markup, "text/html")
        .body
        .childNodes
      ]
      .filter(node => node.nodeType === 3)
      .at(-1)
      ?.nodeValue;
    }
    
    console.log(
      `getLastTextNodeValueFromMarkup('<i class="icon status red"></i>, 1 - deleted') ...
      "${ getLastTextNodeValueFromMarkup('<i class="icon status red"></i>, 1 - deleted')}"`
    );

    【讨论】:

    • 如果不是因为我拥有的所有数据和不同种类的数据都很大,我会尝试使用它,因为代码非常混乱
    • @BrianOrion ...任何方法都需要考虑所有可能的输入值变化。因此,如果 OP 能够首先提供/分享这些重要信息,我们将不胜感激。
    • 是的,我很抱歉,但由于它是公司的事情,只有那个特定的问题是我没有写其余部分的问题......我指定如果可能的话,我正在寻找一个简单的简短解决方案,如 @Feki哈姆扎的回答
    • @BrianOrion ...还有一条评论...“寻找一个简单的简短解决方案” 如果它在边缘方面也足够可靠,那也不错案例。像上面getLastTextNodeValueFromMarkup 这样的解析方法不仅在它所说的方面可靠,而且简单而简短。
    猜你喜欢
    • 2011-07-12
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多