【问题标题】:jQuery remove tag from HTML String without RegExjQuery从没有RegEx的HTML字符串中删除标签
【发布时间】:2012-08-24 13:03:07
【问题描述】:

所以我有以下字符串:

var s = '<span>Some Text</span> Some other Text';

结果应该是一个内容为“Some other Text”的字符串。

我试过了……

var $s = $(s).not('span');

...还有很多其他的 remove()not() 等,但没有任何效果。

有什么建议吗?我可以用正则表达式匹配字符串,但我更喜欢通用的 jQuery 解决方案。

编辑:

我确实使用正则表达式搜索解决方案,我只是想知道为什么这个示例不起作用: http://jsfiddle.net/q9crX/150/

【问题讨论】:

  • 你真的把那个 html 添加到 DOM 的某个地方了吗?您需要先添加它,然后才能使用 jQuery 选择它

标签: jquery html string


【解决方案1】:

您可以将string 包装在一个 jQuery 对象中,然后进行如下操作:

var removeElements = function(text, selector) {
    var wrapped = $("<div>" + text + "</div>");
    wrapped.find(selector).remove();
    return wrapped.html();
}

用法

var removedSpanString = removeElements("<span>Some Text</span> Some other Text", "span");

这种方法的美妙之处在于您可以指定要删除的 jquery 选择器。即您可能希望删除字符串中的&lt;th&gt;。在这种情况下,这将非常方便。 希望这可以帮助!

【讨论】:

  • 好的,谢谢,这个有效,不是正则表达式! :) 但是查看我的问题的编辑,也许我的 jsfiddle-example 也有解决方案。
  • 这家伙是救命稻草!
  • 最好的答案...这就像魅力!
【解决方案2】:

一个非常简单的方法:

var html = '<span>Remove <b>tags &amp; entities</b></span>';
var noTagText = $(html).text();
// ==> noTagText = 'Remove tags & entities'

请注意,它会删除标签,但也会删除 html 实体。

【讨论】:

    【解决方案3】:

    这可能适合您的需求:

    <([^ >]+)[^>]*>.*?</\1>|<[^/]+/>
    

    Debuggex Demo

    在 JavaScript 中:

    $s = s.replace(/<([^ >]+)[^>]*>.*?<\/\1>|<[^\/]+\/>/ig, "");
    

    它还删除了自闭合标签(例如&lt;br /&gt;)。

    【讨论】:

    • 我觉得用现有的解析器为任何东西编写正则表达式解析器通常意味着你做错了。
    • @bytesized 你说得对,我现在不会那样回答这个问题。
    • 伟大的调试可视化!
    • 非常感谢!
    【解决方案4】:

    像这样删除html标签

    DEMO

    var s = '<span>Some Text</span> Some other Text';
    var r = /<(\w+)[^>]*>.*<\/\1>/gi;
    s.replace(r,"");
    

    这里给出的答案:http://www.webdeveloper.com/forum/showthread.php?t=252483

    【讨论】:

    • @sp00m - 感谢进入但有给定输入的工作人员..它需要根据操作需要进行修改
    • 是的,这个正则表达式真的很棒 :) 它应该对我有用,但我仍然有这个问题:jsfiddle.net/q9crX/150
    • 我对这个答案投了反对票,因为我不相信使用正则表达式来解析 HTML 是有效的。特别是当这个问题是使用可以轻松操作 DOM 节点的 jQuery 时。
    • 这提供了一个更好的解决方案。 stackoverflow.com/questions/10585029/…
    【解决方案5】:

    只需执行以下操作:

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
    
    <script>
    $(document).ready(function(){
     $("span").not("span div").each(
     function(index, element) {
    $("span").remove();
     }
     );
     });
    
    </script>
    
    <span>Some Text</span> Some other Text
    

    【讨论】:

      【解决方案6】:

      查看link

      例如更具体到您的情况:-

      var s = '<span>Some Text</span> Some other Text';
      var $s = s.replace(/<span>(.*)<\/span>/g, "");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-31
        • 2013-02-24
        • 1970-01-01
        • 2011-11-24
        • 2021-12-03
        相关资源
        最近更新 更多