【问题标题】:Split a image tag on html string在 html 字符串上拆分图像标签
【发布时间】:2023-03-30 10:20:01
【问题描述】:

代码:

<div id="start">    
    <p>"hi split html string"<p><br>"now"
    <img class="image1" src="some src" master_src="some src" master_w="400" master_h="320">
    "second tag is coming"<br><img class="image2" src="some src" master_src="some src" master_w="400" master_h="320"><h1>end here</h1>
</div>

输出:

<p>"hi split html string"<p><br>"now" ,   "second tag is coming"<br> , <h1>end here</h1>

我怎样才能实现这个输出?为了使用拆分功能(或任何更好的方法),这个图像类的正则表达式可能是什么?请给我一个演示

【问题讨论】:

  • 闻起来像 XY 问题...您可能想使用 DOM,而不是正则表达式。
  • 能给我一个演示吗
  • 因为可以有任意数量的图像标签所以请给我一些通用的解决方案
  • html.split(/]*>/)
  • 看看这个:regex101.com/r/uT8aZ5/1

标签: javascript jquery html regex split


【解决方案1】:

你为什么要多次问同一个问题?
这是你的答案

  $('#start').find('img').each(function(index){


    var split_text = $(this).html().split(/<img[^>]*>/)[index];
    alert(split_text)
    });

【讨论】:

    【解决方案2】:

    我不完全确定我理解您的最终目标,但如果您想从 HTML 中删除图像,您可以使用 DOM。首先创建一个虚拟元素并将其 innerHTML 设置为 HTML 字符串:

    var dummy = document.createElement('div')
    dummy.innerHTML = html
    

    现在你得到了一个 div,其中包含你的 HTML 结构作为 DOM 元素。但是,你想要的是你的 div,而不是虚拟的:

    var div = dummy.children[0]
    

    然后循环孩子,检查它是否是图像,如果是则将其删除:

    for (var i=0; i<div.children.length; i++) {
      var child = div.children[i]
      if (child.tagName == 'IMG') {
        div.removeChild(child)
      }
    }
    

    您可以将 div 附加到 DOM:

    document.body.appendChild(div)
    

    或者您可以将 HTML 作为字符串取回,而无需图像:

    div.innerHTML
    //^ <p>"hi split html string"</p><br>"now""second tag is coming"<br><h1>end here</h1>
    

    另请注意,您的 HTML 无效,您没有使用 &lt;/p&gt; 关闭段落,因此如果无效,上述内容将不起作用。

    【讨论】:

    • 不能用outerHTML跳过一步吗?
    • @AustinMullins:也许,不确定您的意思,请随时编辑。
    猜你喜欢
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多