jquery.tmpl.min.js 渲染模板 小于号(<) 变 /< 处理
问题
突发的问题,用了好多年的 jquery.tmpl.min.js 报错了;
Uncaught SyntaxError: Unexpected token ';'
at new Function (<anonymous>)
at o (jquery.tmpl.min.js:1:4243)
at e.template (jquery.tmpl.min.js:1:2487)
at e.tmpl (jquery.tmpl.min.js:1:1763)
at init.tmpl (jquery.tmpl.min.js:1:1158)
at CSSCommonJS.RenderTemplatefunction (Common.js?v=202002181458:1800:17)
at Master_BillingHistoryDetailNew.BindAHCBillingPreviews (eval at <anonymous> (jquery.min.js:2:11412), <anonymous>:1193:43)
at Object.eval (eval at <anonymous> (jquery.min.js:2:11412), <anonymous>:924:19)
at e.each (jquery.min.js:2:11819)
at init.each (jquery.min.js:2:8381)
报错点进去是这个样子
if((typeof(yyyymm<=0)!=='undefined' && (yyyymm<=0)!=null) && (typeof(yyyymm<=0)==='function'?(yyyymm<=0).call
模板文件
<tr style="{{if yyyymm<=0}}display:none;{{/if}}">
猜测 浏览器升级可能添加了啥功能导致这个不工作了。
解决方法
先说结果 修改了 jquery.tmpl.min.js 一个方法 function k(a), 搞定了这件事。
原方法
function k(a) {
return a ? a.replace(/\\'/g, "'").replace(/\\\\/g, "\\") : null
}
修改后
function k(a) {
return a ? a.replace(/\\'/g, "'").replace(/\\\\/g, "\\").replace(/</g, "<").replace(/>/g, ">") : null
}
解决过程
通过调试发现每一个需要处理的语法 它会 走这个方法,然后就想着替换回对应的 符号就行了。然后js就不报错了。
期间还去看了相关的代码,github
这个 function k(a) 方法应该对应的是 方法 unescape( args )
function unescape( args ) {
return args ? args.replace( /\\'/g, "'").replace(/\\\\/g, "\\" ) : null;
}
问了GPT,让我写成
<script type="text/x-jquery-tmpl" id="AHCBillTemp">
<tr style="{{if yyyymm<=0}}display:none;{{/if}}">
<td>${CurrencySymbol} ${payment}</td>
</tr>
</script>
发现并没有好使。可能这个老项目不太适合。还是直接修改源码更靠谱点。
修改完的 jquery.tmpl.min.js

浙公网安备 33010602011771号