javascript 在字符串嵌入表达式

在C语言中,有一个叫printf的方法,我们可以在后面添加不同的类型的参数嵌入到将要输出的字符串,这是非常有用的方法,因为在javascript有大量这样的字符串拼接操作。如果涉及逻辑,我们可以用模板,如果轻量点,我们发现在主流框架,都提供了一个叫substitute的方法(在Prototype为interpolate, Base2为format)。嘛,由于我比较喜欢ruby,因此使用ruby式的标记法——#{}。#{}里面可以为一个单词,这时第二参数为一个对象,键名即为此单词。如果#{}为一个数字,这时使用Python format的用法,这时就存在多个参数,依次对应其里面的数字(记得qwrap里面的StringH.format也这样用。)

源码:

//2011.3.6 by 司徒正美
     + function(){
        var reg_format =  /\\?\#{([^{}]+)\}/gm, A_slice = Array.prototype.slice;
        this.dom = this.dom || {};
        dom.format = function(str, object){
          var array = A_slice.call(arguments,1);
          return str.replace(reg_format, function(match, name){
            if (match.charAt(0) == '\\')
              return match.slice(1);
            var index = Number(name)
            if(index >=0 )
              return array[index]
            if(object && (object[name]!==void 0))
              return  object[name]
            return  '' ;
          });
        }
      }()
var a = dom.format("Result is #{0},#{1}", 22,33); alert(a);//"Result is 22,33" var b = dom.format("#{name} is a #{sex}",{name:"Jhon",sex:"man"}); alert(b);//"Jhon is a man"

运行代码

     dom.require("lang",function(){
         var a = dom.format("style.#{name}=((isEnd ? #{end} : adapter.#{type}( #{from}, #{change},'#{easing}',per ))|0)+'#{unit}';",{
           name:"width",
           end:"400",
           type:"_default",
           from:"200",
           change:"200",
           easing:"linear",
           unit:"px"
         })   ;
         dom.log(a)
       });
//style.width=((isEnd ? 400 : adapter._default( 200, 200,'linear',per ))|0)+'px';

另一种拼接字符串的方法:

   /**
         * 用于拼接多行HTML片断,免去写<与>与结束标签之苦
         * @param {String} tag 可带属性的开始标签
         * @param {String} innerHTML 可选
         * @param {Boolean} xml 可选 默认false,使用HTML模式,需要处理空标签
         * @example var html = T("P title=aaa",T("span","111111")("strong","22222"))("div",T("div",T("span","两层")))("H1",T("span","33333"))('',"这是纯文本");
         * console.log(html+"");
         * @return {Function}
         */
        rnoclose = /^(area|base|basefont|bgsound|br|col|frame|hr|img|input|isindex|link|meta|param|embed|wbr)$/i,
        tag: function (start, content, xml){
            xml = !!xml
            var chain = function(start, content, xml){
                var html = arguments.callee.html;
                start && html.push("<",start,">");
                content = ""+(content||"");
                content && html.push(content);
                var end = start.split(" ")[0];//取得结束标签
                if(end && (xml || !rnoclose.test(end))){
                    html.push("</",end,">");
                }
                return chain;
            }
            chain.html = [];
            chain.toString = function(){
                return this.html.join("");
            }
            return chain(start,content,xml);
        },     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值