Home Ask Login Register

Developers Planet

Your answer is one click away!

Drew Coffin February 2016

Why does using replace to unescape html tags strips out all other html tags as well?

I need to convert &lt; and &gt; in a table to < and >. The function I'm using to do this works well.

<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>

and

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

However, this function also removes the <em> tags that don't need any unescaping. Anyone know why?

https://jsfiddle.net/et1crLug/

Answers


Draco18s February 2016

Because you used .text() to get your HTML content.

Use .html() instead:

var t = $this.html();

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


charlietfl February 2016

Shortcut method using html(function) to replace the each loop

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

DEMO


nicdford February 2016

When you're using replace() i've found it only replaces the first instance. If you use regex you can set it to replace every instance of &lt; and &gt; with /g

https://jsfiddle.net/xdoj0qLy/

Post Status

Asked in February 2016
Viewed 3,291 times
Voted 13
Answered 3 times

Search




Leave an answer


Quote of the day: live life