问题
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?
回答1:
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.
回答2:
Just use .html()
, then search and replace your template tags:
$("#modal").html().replace(/<%=/g, '<%=').replace(/%>/g, '%>');
Here's the fiddle: http://jsfiddle.net/PwL7L/
回答3:
_.unescape should help you use div instead of script.
_.unescape($("#modal").html());
来源:https://stackoverflow.com/questions/11909784/jquery-get-raw-text-unescaped-for-further-parsing-via-underscore-templates