jQuery:将HTML解析为文本

4

我在一个字符串上使用substr()来输出一条消息中的一组字符。我的问题是,如果该字符串包含HTML标签,我会在文本中得到这些标签。

在使用substr()之前,是否可以解析HTML以仅从消息本身中提取文本?

示例1:

var string = "Hi";

alert(string.substr(0, 7));

警告:


示例2:

var string = "<br/>Hi";

alert(string.substr(0, 7));

注意:

<br/>你好


string 是如何被填充的?你可以像这样做 $(string).text(),但可能有一种更高效的方法,不需要使用 jQuery - crush
1
请查看此问题的已接受答案:https://dev59.com/wWkv5IYBdhLWcg3wdQhT - richsilv
9个回答

4
使用 jQuery.text() 方法,可以仅提取文本内容。
var str = "<br/>Hi"

$('<p>' + str + '</p>').text(); //Wrap your input in a p element first to ensure you get the text if your string isn't wrapped in HTML.

2

2

1
如果您的输入已在DOM中读取,则可以使用jQuery仅获取文本。示例:
<p id="foo"><br />Hi</p>

var string = $('#foo').text();

alert(string.substr(0, 7)); //says "Hi"

请查看jQuery文档参考

编辑: 如果您的输入来自其他地方,仍然可以使用jQuery,但可能有更好的解决方案。

var input = "<br />Hi";
var fakeElement = $('<div>' + input + '</div>');

var string = fakeElement.text();

alert(string.substr(0, 7)); //says "Hi"

1
你可以使用正则表达式模式替换HTML标签。
var string = string.replaceAll("<[^>]*>", "");

1
如果您想获得带有HTML标签的文本,请尝试使用jQuery的.innerHTML。
<p id="foo"><br />Hi</p>


$("#foo")[0].innerHTML;

控制台: "<br />你好"


0
你可以利用jQuery的text()函数:
 $('<div>').append('<br />hi').text();

这将创建一个新元素,您可以将标记附加到该元素上,然后使用text()提取文本。有点绕,但它有效。

我建议使用正则表达式解决方案而不是这种方法。


使用 jQuery.append() 在这里与字符串拼接相比效率极低。 - crush
有趣,我得记下来! - Mister Epic

0

试试这个:

var string = "<br/Hi>".replace(/&#39;/g, '\'').replace(/&amp;/g, '&').replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&quot;/g, '"').replace(/&apos;/g, '\'');
alert(string);

0

试试这个

var string = "<br/>Hi";

alert($('<span>'+string+'</span>').text().substr(0, 7));

代码沙盒


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接