为什么使用替换unescape html标签也会删除所有其他html标签?

时间:2016-02-08 18:59:08

标签: javascript jquery html

我需要将表格中的&lt;&gt;转换为<>。我用来执行此操作的功能效果很好。

<div class="schedule">    
<table>
      <tbody>
        <tr>
          <td>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.&lt;br /&gt;
            <em>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</em>&lt;br /&gt;Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</td>
        </tr>
      </tbody>
    </table>
</div>

$('.table-container td').each(function(){
  var $this = $(this);
  var t = $this.text();
  $this.html(t.replace('&lt','<').replace('&gt', '>'));
});

但是,此功能还会删除不需要任何转义的<em>标记。谁知道为什么?

https://jsfiddle.net/et1crLug/

3 个答案:

答案 0 :(得分:1)

因为您使用.text()来获取HTML内容。

改为使用.html()

var t = $this.html();

https://jsfiddle.net/et1crLug/1/

答案 1 :(得分:1)

使用html(function)替换each循环

的快捷方式
$('.table-container td').html(function(_,existing){
     return existing.replace('&lt;','<').replace('&gt;', '>');
});

DEMO

答案 2 :(得分:0)

当你使用replace()时,我发现它只替换了第一个实例。如果您使用正则表达式,则可以将其设置为使用&lt;

替换&gt;/g的每个实例

https://jsfiddle.net/xdoj0qLy/