2013-07-03 4 views
0

У меня есть этот DIV:JQuery: Получение «сырое» содержания элемента

<div id="test"> 
    {{? a && b || c < 0}} 
     <div>Pece &alt; Love!</div> 
    {{?}} 
</div> 

Я NEET сделать получить его содержание так же, как это отмечалось выше (че фигурной синтаксис брекетов для шаблона двигателя).

К сожалению, ни .html(), ни .text() не работает:

// $('#test').text() 
{{? a && b || c < 0}} 
    Pece &alt; Love! 
{{?}} 

.text() избавляется от тегов

// $('#test').html() 
{{? a &amp;&amp; b || c &lt; 0 }} 
    <div>Pece &amp;alt; Love!</div> 
{{?}} 

.html() кодирует амперсанд (и < >).

Любая помощь? Спасибо

+1

Вы должны сделать это до или после замены шаблона? – Cheluis

+0

Что случилось с выходом '.text()'? – Blender

+3

Этот HTML-код больше не существует в отношении браузера. После его анализа (и он будет анализироваться как HTML, вы не можете это прекратить), он существует только как HTML. – lonesomeday

ответ

8

Не рекомендуется хранить ваши шаблоны в формате HTML. Храните их внутри <script> тегов с настраиваемой MimeType:

<script type="text/your-template" id="template"> 
    {{? a<b && b>c }} 
     <div>Peace &amp; Love!</div> 
    {{?}} 
</script> 

Сохранение шаблонов, которые не HTML, как HTML будет давать нежелательные результаты, как вы заметили:

  • Ваша оригинальная разметка исчезает. Что вы видите, когда вы смотрите на .innerHTML собственности является то, что браузер интерпретировать ваш шаблон, если это было действительно HTML, который может изменить его: http://jsfiddle.net/ZFd6a/3/
  • a<b && b>c превратится в ac, так как средняя часть будет интерпретироваться как элемент ,
  • Блуждающие знаки меньшего размера и больше, чем знаки будут преобразованы в объекты символов.
  • Вы должны использовать символы символов HTML.

Вы полностью защищены от HTML-парсера браузера. Когда вы перемещаете свой шаблон в теги <script> с типом mimetype, который не зарезервирован для JavaScript, ваш шаблон рассматривается как строка, которая именно то, что вы хотите.

+1

http://jsfiddle.net/FX88y/ –

+0

спасибо, я знаю об этом, и когда я использую doTjs, я обычно это делаю. В этом случае, однако, я должен использовать обычные теги. – pistacchio

+2

@pistacchio: Почему? – Blender

Смежные вопросы