template parser node javascript jquery mustache

javascript - parser - jQuery+client-side template="Error de sintaxis, expresión no reconocida"



node html template (6)

Como documento oficial: a partir de 1.9, una cadena solo se considera HTML si comienza con un carácter menor que ("<"). El complemento Migrate se puede usar para restaurar el comportamiento anterior a 1.9.

Si se sabe que una cadena es HTML, pero puede comenzar con texto arbitrario que no sea una etiqueta HTML, páselo a jQuery.parseHTML () que devolverá una matriz de nodos DOM que representan la marca. Se puede crear una colección jQuery a partir de esto, por ejemplo: $($.parseHTML(htmlString)) . Esto se consideraría la mejor práctica al procesar plantillas HTML, por ejemplo. Los usos simples de cadenas literales como $("<p>Testing</p>").appendTo("body") no se ven afectados por este cambio.

Acabo de actualizar jQuery de 1.8.3 a 1.9, y comenzó a fallar de repente.

Esta es mi plantilla:

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

Así es como lo leí:

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

Así es como lo transformo en un objeto jQuery (necesito usar métodos jQuery en él):

template = $(modal_template_html);

... y jQuery se cuelga!

Error: error de sintaxis, expresión no reconocida: <div> hola </ div>

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

jquery-1.9.0.js (línea 3811)

Sin embargo, si declaro la plantilla como una variable de texto sin formato, comienza a funcionar de nuevo:

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

¿Alguien puede ayudarme a resolver esto?

ACTUALIZACIÓN : El equipo de Jquery escuchó y changed cosas a la normalidad en 1.10:

El cambio más importante que probablemente verá es que hemos aflojado los criterios para el procesamiento de HTML en $ (), lo que permite espacios principales y nuevas líneas como lo hacíamos antes de la versión 1.9.


EugeneXa lo mencionó en un comentario, pero merece ser una respuesta:

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

Esto recorta el espacio en blanco ofensivo desde el comienzo de la cadena. Lo usé con Moustache, así:

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


Puedes usar

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



Supongo que su plantilla comienza con un espacio o una pestaña.

Puedes usar jQuery así:

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

o analizar la cadena para eliminar espacios del comienzo:

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


Yo tenía el mismo error:
"Error de sintaxis, expresión no reconocida: //"
Es un error conocido en JQuery, así que necesitaba pensar en una solución alternativa,
Lo que hice fue:
Cambié la etiqueta "script" a "div"
y agregado en angular este código
y el error se ha ido ...

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