jquery.tmpl.min.js 渲染模板 小于号(<) 变 /&lt; 处理

问题

突发的问题,用了好多年的 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&lt;=0)!=='undefined' && (yyyymm&lt;=0)!=null) && (typeof(yyyymm&lt;=0)==='function'?(yyyymm&lt;=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(/&lt;/g, "<").replace(/&gt;/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

posted @ 2025-07-03 16:09  梨花大将  阅读(12)  评论(0)    收藏  举报