【问题标题】:How to add empty space between the elements when I use $('body').text()?使用 $('body').text() 时如何在元素之间添加空格?
【发布时间】:2021-01-20 18:41:49
【问题描述】:

例如,如果我创建一个包含以下内容的页面:

<body>
<p>
ABC DEF<p>GHI</p>
JKL<br>MNO
</p>
</body>

然后我进入浏览器:

ABC DEF

GHI

JKL
MNO

但是当我现在使用$('body').text() 时,我又回来了:

ABC DEFGHI
JKLMNO

是否可以在元素之间添加空格?所以“DEFGHI”和“JKLMNO”实际上是两个词而不是一个词?

这里是jsfiddle 示例的链接。

【问题讨论】:

    标签: javascript html jquery


    【解决方案1】:

    使用html() 代替text(),然后用空格替换br 和p 标签。

    var text = $('body').html();
    var str = text.replace( /<br\s*[\/]?>/gi, '\r\n'); // <br> to newline
    var str2 = str.replace(/<\/?p[^>]*>/g, '\r\n'); // <p> to newline
    var str3 = str2.replace(/  +/g, ' '); // multiple spaces to one
    
    console.log(str3)
    

    产生的结构与 HTML 完全相同,但在文本中

    ABC DEF
    
    GHI
    
    JKL
    MNO
    

    如果你将替换为空白空间 ' ' 而不是 '\r\n' 你会得到:

    ABC DEF GHI 
    JKL MNO
    

    【讨论】:

    • 感谢 Alon 的回答。我也测试了 .html() 但例如 '&' 它返回 '&'。例如,“A&B”就是“A&B”。所以我需要更换所有这些标志。还是有更简单的方法来保留“&”?
    • 基本上parse HTML with Regex 不是一个好习惯。当您询问特定的两个标签时,您的问题包括一个有限的场景。对于这种任务 - 需要替换的少量标签,Regex replacement of the tags 就可以了。如果不是这种情况,我建议使用 DOMParser 解析 HTML 并使用选择器来获取您想要的内容,例如 Like this answer。
    • 好的,我明白了。谢谢。
    猜你喜欢
    • 2023-01-18
    • 2012-08-07
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 2018-10-30
    • 2018-01-23
    相关资源
    最近更新 更多