Подтвердить что ты не робот

JQuery + клиентский шаблон = "Синтаксическая ошибка, непризнанное выражение"

Я только что обновил jQuery с 1.8.3 до 1.9, и он внезапно начал сбой.

Это мой шаблон:

<script type="text/template" id="modal_template">
    <div>hello</div>
</script>

Вот как я его читаю:

modal_template_html = $("#modal_template").html();

Вот как я преобразую его в объект jQuery (мне нужно использовать на нем методы jQuery):

template = $(modal_template_html);

... и сбой jQuery!

Ошибка: ошибка синтаксиса, нераспознанное выражение: <div> hello </div>

slice.call(docElem.childNodes, 0) [0].nodeType;

jquery-1.9.0.js(строка 3811)

Однако, если я объявляю шаблон как текстовую переменную, он снова начинает работать:

var modal_template_html = '<div>hello</div>';

Может ли кто-нибудь помочь мне понять это?

UPDATE: Команда Jquery услышала и изменила вещи в нормальном режиме в 1.10:

Самое большое изменение, которое вы, вероятно, увидите, - это то, что weve ослабили критерии обработки HTML в $(), что позволяет использовать пробелы и символы новой строки, как это было до версии 1.9

4b9b3361

Ответ 2

Я думаю, ваш шаблон начинается с пробела или вкладки.

Вы можете использовать jQuery следующим образом:

$($.parseHtml(modal_template_html)[1]);

или проанализировать строку для удаления пробелов в начале:

$(modal_template_html.replace(/^[ \t]+/gm, ''));

Ответ 3

EugeneXa упомянул об этом в комментарии, но он заслуживает ответа:

var template = $("#modal_template").html().trim();

Это обрезает пропущенные пробелы с начала строки. Я использовал его с Усы, вот так:

var markup = Mustache.render(template, data);
$(markup).appendTo(container);

Ответ 4

Вы можете использовать

var modal_template_html = $.trim($('#modal_template').html());
var template = $(modal_template_html);

Ответ 5

В качестве официального документа: Начиная с 1.9, строка считается только HTML, если она начинается с символа "меньше" ( "<" ). Плагин Migrate можно использовать для восстановления поведения до 1.9.

Если строка известна как HTML, но может начинаться с произвольного текста, который не является тегом HTML, передайте его в jQuery.parseHTML(), который вернет массив узлов DOM, представляющих разметку. Из этого можно создать коллекцию jQuery, например: $($.parseHTML(htmlString)). Это считается лучшей практикой при обработке HTML-шаблонов, например. Это простое использование литералов, таких как $("<p>Testing</p>").appendTo("body").

Ответ 6

У меня была такая же ошибка:
"Синтаксическая ошибка, непризнанное выражение://"
Это известная ошибка в JQuery, поэтому мне нужно было подумать об обходном решении,
Что я сделал:
Я изменил тег "script" на "div"
и добавлен в angular этот код
и ошибка исчезла...

app.run(['$templateCache', function($templateCache) {
    var url = "survey-input.html";
    content = angular.element(document.getElementById(url)).html()
    $templateCache.put(url, content);
}]);