javascript - js占位符问题
PHPz
PHPz 2017-04-11 11:01:06
[JavaScript讨论组]


请问reder里应该怎么写

PHPz
PHPz

学习是最好的投资!

全部回复(3)
伊谢尔伦

就是把模板节点内包含的所有节点中有模板标记值的用正则找出来,然后用数据模型的值去替换掉呀

高洛峰

精简版,不考虑\\,容错率略低,供参考。

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);
    })
}
PHPz

一个不破坏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中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号