Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

jQuery get raw text (unescaped) for further parsing via underscore templates

I currently have an html modal block like so:

<div id="modal">
   <div class="header_buttons"></div>
   <p> 
       Are you sure you would like to perform <%= action_name %> 
       on <%= count %> objects?
   </p>
   <div class="footer_buttons">
        <button>Do <%= action_name %></button>
   </div>
</div>

I'd like to parse this content through _.template

$("#modal").html() //-> escapes `<%` 
$("#modal").text() //-> doesn't escape, but doesn't include tags. 

My immediate solution is to target each element instead of the whole block so that I can use text() but I'm curious if there's an obvious solution here otherwise?

like image 999
Yuji 'Tomita' Tomita Avatar asked Aug 10 '12 21:08

Yuji 'Tomita' Tomita


2 Answers

A solution you see a lot is to put HTML embedded templates in script tags, which are not HTML escaped.

So transforming your div into:

<script id="modal" type="text/template">
   ...
</script>

...would make $("#modal").html() return the raw HTML.

Of course if there's some reason you need it to be in a div, then this isn't for you.

like image 96
numbers1311407 Avatar answered Sep 19 '22 12:09

numbers1311407


Just use .html(), then search and replace your template tags:

$("#modal").html().replace(/&lt;%=/g, '<%=').replace(/%&gt;/g, '%>');

Here's the fiddle: http://jsfiddle.net/PwL7L/

like image 43
Joseph Silber Avatar answered Sep 20 '22 12:09

Joseph Silber