jQuery将文本标签转换为HTML标签

3

我有一个字段,它可以填充一个类似于在stackoverflow上提问的div。

    var text = $("#edit").val();
    $("#output").text(text);

我希望能够使用一些选定的HTML标签,例如<b>加粗。目前尝试时,这些标签出现为文本而非HTML。如果可能,我希望能够搜索特定标签并将其转换为HTML。
有人可以帮忙吗?
谢谢
3个回答

6
使用 .html() 函数替代 .text() 函数,除了 <b> 标签之外的所有内容都需要进行转义。 编辑: 根据您希望保留多少标签并对多少标签进行编码,方法可能会有所不同。 这个例子将保留 <b> 标签。
var text = 'This is <i>encoded text</i> but this is <b>bold</b >!';
var html = $('<div/>')
    .text(text)
    .html()
    .replace(new RegExp('&lt;(/)?b\\s*&gt;', 'gi'), '<$1b>');

谢谢,但我应该如何具体实现这个? - Tim
太棒了,谢谢。另外,我该如何添加其他标签?例如 U 和 I?再次感谢。 - Tim
@Tim:在正则表达式中,使用(b|u|i)代替b,并将替换字符串更改为'<$1$2>'。查看一些正则表达式参考资料以进行更高级的替换。 - Jaroslav Jandek

1

这应该可以:

$('#output').html($('<div/>').text(text).html().replace(/&lt;(\/?b)&gt;/g, '<$1>'));

显然,如果您想允许除了标签之外的更多内容,您的正则表达式可能会变得非常复杂,但基本上您必须有选择地进行编码,或者对所有内容进行编码,然后有选择地进行解码。后者似乎更安全。


1

尝试使用...

$("#output").html(text);

文档


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