From cc880885a0d6439ed83f5eb30236b9a8744556fe Mon Sep 17 00:00:00 2001 From: morning-star <1453017105@qq.com> Date: Mon, 11 Dec 2023 09:15:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20table=20=E8=A1=A8=E5=A4=B4?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=20`templet`=20=E4=BD=BF=E7=94=A8=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E5=AD=97=E7=AC=A6=E4=B8=B2=E6=97=B6=EF=BC=8C=E4=B8=80?= =?UTF-8?q?=E4=BA=9B=E7=89=B9=E6=AE=8A=E7=9A=84=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=20laytpl=20=E7=95=8C=E5=AE=9A=E7=AC=A6=E8=A2=AB=E8=BD=AC?= =?UTF-8?q?=E4=B9=89=E7=9A=84=E9=97=AE=E9=A2=98=20(#1438)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 修复 table 表头属性 `templet` 使用模板字符串时,一些特殊的自定义 laytpl 界定符被转义的问题 例如使用 `<% %>` 作为界定符时,`<` 和 `>` 会被转义 close https://gitee.com/layui/layui/issues/I8L3OC * 优化 table 模板解析 * 回退 bd2994e 中对 table 模板函数类型的改动 revert· bd2994ec3af2745a7aef98e9be78fcdfbd25dc3b BREAK CHANGE 1.模板字符串最外层包裹 div 时的行为不同,现在由 laytpl 直接处理,会保留最外层的 div,估计影响比较小 2.不再支持 jQuery 特有的选择器,几乎无影响 --- src/modules/table.js | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/modules/table.js b/src/modules/table.js index 652cad36..30f3827b 100644 --- a/src/modules/table.js +++ b/src/modules/table.js @@ -77,6 +77,16 @@ layui.define(['lay', 'laytpl', 'laypage', 'form', 'util'], function(exports){ return config || null; }; + // lay 函数可以处理 Selector,HTMLElement,JQuery 类型 + // 无效的 CSS 选择器字符串,会抛出 SyntaxError 异常,此时直接返回 laytpl 模板字符串 + var resolveTplStr = function(templet){ + try{ + return lay(templet).html(); + }catch{ + return templet; + } + } + // 解析自定义模板数据 var parseTempData = function(obj){ obj = obj || {}; @@ -97,9 +107,9 @@ layui.define(['lay', 'laytpl', 'laypage', 'form', 'util'], function(exports){ if(templet){ content = typeof templet === 'function' ? templet.call(item3, obj.tplData, obj.obj) - : laytpl($(templet).html() || String(content)).render($.extend({ - LAY_COL: item3 - }, obj.tplData)); + : laytpl(resolveTplStr(templet) || String(content)).render($.extend({ + LAY_COL: item3 + }, obj.tplData)); } // 是否只返回文本