扫码关注官方订阅号
请问reder里应该怎么写
学习是最好的投资!
就是把模板节点内包含的所有节点中有模板标记值的用正则找出来,然后用数据模型的值去替换掉呀
精简版,不考虑\\,容错率略低,供参考。
\\
function render(el, modal) { // 利用正则获取所有形如{{...}}的字符串进行替换 el.outerHTML = el.outerHTML.replace(/{{([^}]+)}}/g, function(str, keys) { // 去掉字符串多余的空格,用“.”切分成数组 return keys.trim().split('.').reduce(function(a,b){ // 以数组的每一个元素作为对象属性名,获取子对象 return a[b] || ""; // reduce对象的初始值设为modal }, modal); }) }
一个不破坏dom结构的实现
function render(el, model) { function renderElement(el) { Array.from(el.attributes).forEach(renderAttr); Array.from(el.childNodes).forEach(function (node) { if (node instanceof Text) renderText(node); if (node instanceof Element) renderElement(node); }); } function renderText(text) { text.data = renderStr(text.data); } function renderAttr(attr) { attr.value = renderStr(attr.value); } function renderStr(str) { return str.replace(/(\\)?\{\{(.*?)(\\)?\}\}/g, function (word, pre, token, post) { if (pre || post) { return word.replace('\\', ''); } var value = token .replace(/\s/g, '') .split('.') .reduce(function (context, member) { if (context === null || context === undefined) return; else return context[member]; }, model); if (value === null || value === undefined) return ''; else return value; }); } renderElement(el); }
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
就是把模板节点内包含的所有节点中有模板标记值的用正则找出来,然后用数据模型的值去替换掉呀
精简版,不考虑
\\,容错率略低,供参考。一个不破坏dom结构的实现