【问题标题】:how to remove &nbsp; and <br> using javascript or jQuery?如何使用 javascript 或 jQuery 删除 和 <br>?
【发布时间】:2016-06-30 19:06:14
【问题描述】:

我编写了以下代码。但它只删除&amp;nbsp; 而不是&lt;br&gt;

var docDesc = docDescription.replace(/(&nbsp;)*/g,"");
var docDesc1 = docDescription.replace(/(<br>)*/g,"");

【问题讨论】:

  • 欢迎来到 SO,请花几分钟时间阅读常见问题解答和 Markdown 文档(编辑问题时右侧空白处提供了有用的概要)。
  • docDescription 是一个简单的字符串还是有一些历史记录(例如某个 DOM 节点的 innerHTML())?
  • 一般来说,你不应该使用正则表达式来解析 HTML。在 JavaScript 上这样做更没有意义;你有一个解析过的 DOM 结构,并在一个巨大的 HTML 解析器——浏览器的上下文中运行。
  • @Kobi:这取决于。在某些情况下,您只有一个序列化的 HTML 结构(又名字符串),并且想要在将其注入您的站点之前进行一些预处理(想想 XSS)。
  • 那么你需要一个 javascript html 解析器,和往常一样。我怀疑情况是否如此。 @Shaz - 我认为我们在这里缺少一些上下文。 docDescription 是什么?它现在看起来如何,它是如何创建的?

标签: javascript jquery


【解决方案1】:

您可以单独使用 CSS 实现删除 &lt;br&gt;

#some_element br {
  display: none;
}

如果这不符合您的需求,并且您想真正删除每个 &lt;br&gt;,这取决于 docDescription 是否真的是一个字符串(那么上述解决方案之一应该可以工作,尤其是 Matt Blaine 的)或DOM 节点。在后一种情况下,您必须遍历 br 元素:

//jquery method:
$('br').remove();

// plain JS:
var brs = common_parent_element.getElementsByTagName('br');
while (brs.length) {
  brs[0].parentNode.removeChild(brs[0]);
}

编辑: 为什么是 Matt Baline 的建议?因为他还处理这种情况,&lt;br&gt; 出现在 XHTML 上下文中并带有右斜杠。但是,更完整的是:

/<br[^>]*>/

【讨论】:

  • 非常感谢您提供这个纯 CSS 的解决方案!
【解决方案2】:

试试:

var docDesc = docDescription.replace(/[&]nbsp[;]/gi," "); // removes all occurrences of &nbsp;
docDesc = docDesc.replace(/[<]br[^>]*[>]/gi,"");  // removes all <br>

【讨论】:

    【解决方案3】:

    试试这个

    var text = docDescription.replace(/(?:&nbsp;|<br>)/g,'');
    

    【讨论】:

      【解决方案4】:

      试试“\n”...看看是否有效。

      【讨论】:

        【解决方案5】:

        怎么样:

        var docDesc1 = docDescription.replace(/(<br ?\/?>)*/g,"");
        

        【讨论】:

        • 仍在删除  但不是
          标签。
        • &lt;br&gt; 一些内容,例如类属性?
        • @shaz Boldewyn 的回答结尾处的正则表达式怎么样,然后是gi 而不仅仅是g
        【解决方案6】:

        这将取决于输入文本,但我刚刚检查过它是否有效:

        var result = 'foo <br> bar'.replace(/(<br>)*/g, '');
        alert(result);
        

        【讨论】:

          【解决方案7】:

          你可以这样做:

          var cell = document.getElementsByTagName('br');
          var length = cell.length;
          for(var i = 0; i < length; i++) {
              cell[0].parentNode.removeChild(cell[0]);
          }
          

          它就像一个魅力。不需要 jQuery。

          【讨论】:

            【解决方案8】:

            我使用简单的替换来删除&amp;nbsp;br 标签。

            JavaScript

            var str = docDescription.replace(/&nbsp;/g, '').replace(/\<br\s*[\/]?>/gi, '');
            

            jQuery

            用 remove() 或 replaceWith() 删除 br

            $('br').remove();
            

            $('br').replaceWith(function() {
              return '';
            });
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-07-11
              • 1970-01-01
              相关资源
              最近更新 更多