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 аварий!
ошибка: синтаксическая ошибка, нераспознанное выражение: привет
срез.вызов( docElem.childNodes, 0 )[0].типа;
jquery-1.9.0.js (строка 3811)
однако, если я объявляю шаблон в виде текстовой переменной, он снова начинает работать:
var modal_template_html = '<div>hello</div>';
может кто-нибудь помочь мне выяснить это?
обновление: Команда Jquery услышала и изменить все возвращается в норму в 1.10:
самое большое изменение, которое вы, вероятно, увидите, заключается в том, что мы ослабили критерии обработки HTML в $ (), что позволяет пробелы и переводы строк, как мы делали до версии 1.9
6 ответов:
оказывается, строка, начинающаяся с новой строки (или что-либо другое, кроме"
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, ''));
Евгения упомянула об этом в комментарии, но это заслуживает ответа:
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, только если она начинается с символа less-than ("
если строка известна как HTML, но может начинаться с произвольного текста, который не является тегом HTML, передайте его в jQuery.parseHTML (), который возвращает массив узлов DOM, представляющих разметку. Коллекция jQuery может быть создана из этого, например:
$($.parseHTML(htmlString))
. Это будет считаться лучшим практике при обработке HTML-шаблонов например. Простое использование литеральных строк, таких как$("<p>Testing</p>").appendTo("body")
изменения не затронут.
У меня была та же ошибка:
"Синтаксическая ошибка, нераспознанный выражение: // "
Это известная ошибка в JQuery, поэтому мне нужно было подумать о обходном решении,
Вот что я сделал:
Я изменил тег" script "на" div"
и добавил на угловой этот код
и ошибка исчезла...app.run(['$templateCache', function($templateCache) { var url = "survey-input.html"; content = angular.element(document.getElementById(url)).html() $templateCache.put(url, content); }]);