2015-05-05 1 views
0

Проблема: JQuery возвращает неправильный HTML значение,
JQuery версии: JQuery-1.10.2.min.jsJQuery возвращает неправильный HTML

По какой-то причине $("#peopleTemplate").html() возвращает неправильный HTML. Вместо того чтобы вернуться,

<table> 
    <thead> 
     <tr> 
      <th>First Name</th> 
      <th>Last Name</th> 
     </tr> 
    </thead> 
    <tbody> 
     {{#people}} 
     <tr> 
      <td>{{FirstName}}</td> 
      <td>{{LastName}}</td> 
     </tr> 
     {{/people}} 
    </tbody> 
</table> 

, JQuery возвращает следующее.

 {{#people}} 

     {{/people}} 
    <table> 
    <thead> 
     <tr> 
      <th>First Name</th> 
      <th>Last Name</th> 

     </tr> 
    </thead> 
    <tbody><tr> 
      <td>{{FirstName}}</td> 
      <td>{{LastName}}</td> 

     </tr></tbody> 
</table> 

Что мне не хватает?

Вот полный источник, о котором идет речь.

@using Demo.Javascript.Template.Hogan.Models 
@model List<Person> 

@{ 
    ViewBag.Title = "People"; 
} 

<h2>People</h2> 

<div id="peopleTemplate" class="template"> 
    <table> 
     <thead> 
      <tr> 
       <th>First Name</th> 
       <th>Last Name</th> 
      </tr> 
     </thead> 
     <tbody> 
      {{#people}} 
      <tr> 
       <td>{{FirstName}}</td> 
       <td>{{LastName}}</td> 
      </tr> 
      {{/people}} 
     </tbody> 
    </table> 
</div> 

<div id="main"></div> 

<script language="javascript"> 
    debugger; 
    //var data = { "people" : @Html.Raw(Json.Encode(@Model)) }; 
    var data = { 
     "people": [ 
      { "FirstName": "John", "LastName": "Doe" }, 
      { "FirstName": "Jane", "LastName": "Doe" }, 
      { "FirstName": "Robert", "LastName": "Smith" }, 
      { "FirstName": "Mike", "LastName": "Durden" }, 
      { "FirstName": "Marilin", "LastName": "Monroe" } 
     ] 
    }; 
    var template = Hogan.compile($("#peopleTemplate").html()); 
    var rendered = template.render(data); 
    $("#main").html(rendered); 
</script> 

ответ

2

Ваш шаблон HTML недействителен, попробуйте упаковка шаблон с а <script> тэгом как следующее:

<script id="peopleTemplate" type="text/html"> 
    <div class="template"> 
     <table> 
      <thead> 
       <tr> 
        <th>First Name</th> 
        <th>Last Name</th> 
       </tr> 
      </thead> 
      <tbody> 
       {{#people}} 
       <tr> 
        <td>{{FirstName}}</td> 
        <td>{{LastName}}</td> 
       </tr> 
       {{/people}} 
      </tbody> 
     </table> 
    </div> 
</script> 

Рабочая версия: http://jsfiddle.net/fcbwh1wp/

+0

По какой-то причине визуальная студия жалуется, что элемент HTML внутри скрипта неверен и, таким образом, неправильно форматирует код ... как вы можете видеть здесь http://imgur.com/e5qsLGk. Но я двойная/тройная проверка, если я сделал что-то неправильно. – Sung

+0

@ Попробуйте установить 'type =" text/html "' в тег 'script' и переместите атрибут' class' в блок 'div'. –

+0

Добавление 'type =" text/html "исправлено. Это выглядит как более элегантное решение, чем комментирование тегов hogan/усов. Спасибо, Брент. – Sung

1

На самом деле возвращение, которое вы ожидаете, не должно быть известно, потому что ваш HTML полностью недействителен. Вы не можете иметь текст в элементе <tbody>.

{{}} #people

Вы использовали символьные данные где-то не разрешено появляться. Ошибки, которые могут вызвать эту ошибку, включают:

  • ввод текста непосредственно в теле документа без упаковки его в элемент контейнера (например, <p> пункт </p>) или

  • забывает процитировать значение атрибута (где символы, такие как «%» и «/», являются общими, но не могут появляться без окружающих котировок),

  • или с использованием самозакрывающихся тегов в стиле XHTML (например,) в HTML 4.01 или более ранних версиях. Чтобы исправить, удалите символ дополнительной косой черты ('/'). Дополнительные сведения о причинах этого см. В разделе Пустые элементы в SGML, HTML, XML и XHTML.

+0

Я получил идею от ответа, что я не могу иметь недопустимый элемент внутри '' элемент. Так что я сделал, чтобы прокомментировать их, как показано здесь. http://i.imgur.com/TmAsTlf.png. Это немного громоздко, но это работает. – Sung

1

Я уверен, что это имеет отношение к недействительному HTML.

Единственные прямые дочерние элементы, которые могут иметь теги <tbody>, - это <tr> элементы. {{#people}} не является тегом <tr> и, следовательно, не является допустимым дочерним. Пожалуйста, обратитесь к W3 definition для тега <tbody>.

Я бы предположил, что ваш браузер исправляет HTML при рендеринге страницы, а jQuery возвращает именно то, что представлено в вашей структуре DOM (которая отличается от просмотра источника). Это обычная функция браузеров для исправления HTML для отсутствующих тегов или других распространенных ошибок, чтобы попытаться исправить структуру HTML.

+1

спасибо за ответ, но когда я отсортировал ответ по времени, ответ Эрика появился первым. Но спасибо за ваш ответ, так что 1+ – Sung

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

  • Нет связанных вопросов^_^