修复 table 表头属性 `templet` 使用模板字符串时,一些特殊的自定义 laytpl 界定符被转义的问题 (#1438)

* 修复 table 表头属性 `templet` 使用模板字符串时,一些特殊的自定义 laytpl 界定符被转义的问题

例如使用 `<% %>` 作为界定符时,`<` 和 `>` 会被转义

close https://gitee.com/layui/layui/issues/I8L3OC

* 优化 table 模板解析

* 回退 bd2994e 中对 table 模板函数类型的改动

revert· bd2994ec3a

BREAK CHANGE
1.模板字符串最外层包裹 div 时的行为不同,现在由 laytpl 直接处理,会保留最外层的 div,估计影响比较小
2.不再支持 jQuery 特有的选择器,几乎无影响
pull/1447/head
morning-star 2023-12-11 09:15:24 +08:00 committed by GitHub
parent 7c12ddfdf3
commit cc880885a0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 13 additions and 3 deletions

View File

@ -77,6 +77,16 @@ layui.define(['lay', 'laytpl', 'laypage', 'form', 'util'], function(exports){
return config || null;
};
// lay 函数可以处理 SelectorHTMLElementJQuery 类型
// 无效的 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));
}
// 是否只返回文本