非常棘手的html字符作为文本

时间:2012-03-14 15:42:10

标签: javascript jquery regex replace

<span class="WorkingHours">
   M,W,Th,F 7:30 AM - 4:00 PM &lt;br /&gt;Tu 7:30 AM - 6:00 PM &lt;br /&gt;
</span>

将呈现为此

M,W,Th,F 7:30 AM - 4:00 PM <br />Tu 7:30 AM - 6:00 PM <br />

现在我需要在呈现之前将&lt;br /&gt;替换为空格? 我已经问了一个类似的问题,但我低估了这个问题的诡计...... 我这样做了

$('.WorkingHours').text().replace(/<br \/>/g, " ");

没有用。有人可以帮我解决这个问题吗?

不应该这样吗?

$('.WorkingHours').text().replace(/&lt;br \&gt;/g, " "); 

3 个答案:

答案 0 :(得分:2)

这将有效:

$('.WorkingHours').text(function(i, text) {
    return text.replace(/<br\s*\/?>/g, " "); 
});

DEMO

在这种情况下,.html()将返回HTML实体(&lt;),而.text()将返回已解码的字符(即<)。鉴于此,

$('.WorkingHours').text().replace(/<br \/>/g, " ")

实际上是works as well,但你仍然需要将结果分配回元素。

See also my previous answer.


关于用不同的字符替换最后的<br />:可能使用正则表达式,但在这种情况下,我只是将文本解析为HTML并执行与我显示的相同的操作{{3} }:

var $content = $('<div />').html($('.WorkingHours').text());
$content 
 .find('br').last().replaceWith('.')
 .end().replaceWith(' ');

$('.WorkingHours').html($content.html());

in my previous answer

答案 1 :(得分:0)

你必须转义HTML字符才能完成模式......

replace(/\<br \/\>/g, " ");

答案 2 :(得分:0)

如果你在标记中有html实体,请尝试替换它们

   replace('&lt;br \/&gt;', ' ')

看起来你错过了一个“/”