Ответ 1
Выводит строку, начинающуюся с новой строки (или ничего, кроме "<" ) не считается строкой HTML в jQuery 1.9
http://stage.jquery.com/upgrade-guide/1.9/#jquery-htmlstring-versus-jquery-selectorstring
Я только что обновил 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
Выводит строку, начинающуюся с новой строки (или ничего, кроме "<" ) не считается строкой HTML в jQuery 1.9
http://stage.jquery.com/upgrade-guide/1.9/#jquery-htmlstring-versus-jquery-selectorstring
Я думаю, ваш шаблон начинается с пробела или вкладки.
Вы можете использовать jQuery следующим образом:
$($.parseHtml(modal_template_html)[1]);
или проанализировать строку для удаления пробелов в начале:
$(modal_template_html.replace(/^[ \t]+/gm, ''));
EugeneXa упомянул об этом в комментарии, но он заслуживает ответа:
var template = $("#modal_template").html().trim();
Это обрезает пропущенные пробелы с начала строки. Я использовал его с Усы, вот так:
var markup = Mustache.render(template, data);
$(markup).appendTo(container);
Вы можете использовать
var modal_template_html = $.trim($('#modal_template').html());
var template = $(modal_template_html);
В качестве официального документа: Начиная с 1.9, строка считается только HTML, если она начинается с символа "меньше" ( "<" ). Плагин Migrate можно использовать для восстановления поведения до 1.9.
Если строка известна как HTML, но может начинаться с произвольного текста, который не является тегом HTML, передайте его в jQuery.parseHTML(), который вернет массив узлов DOM, представляющих разметку. Из этого можно создать коллекцию jQuery, например: $($.parseHTML(htmlString))
. Это считается лучшей практикой при обработке HTML-шаблонов, например. Это простое использование литералов, таких как $("<p>Testing</p>").appendTo("body")
.
У меня была такая же ошибка:
"Синтаксическая ошибка, непризнанное выражение://"
Это известная ошибка в 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);
}]);