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);
Resulta que una cadena que comienza con una línea nueva (o cualquier otra cosa que no sea "<") no se considera cadena HTML en jQuery 1.9
http://stage.jquery.com/upgrade-guide/1.9/#jquery-htmlstring-versus-jquery-selectorstring
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);
}]);