js中经常要写dom 和 数据拼接的情况,下面这种format传参方式可以解决。
$.format = function (source, params) { if (arguments.length == 1) return function () { var args = $.makeArray(arguments); args.unshift(source); return $.format.apply(this, args); }; if (arguments.length > 2 && params.constructor != Array) { params = $.makeArray(arguments).slice(1); } if (params.constructor != Array) { params = [params]; } $.each(params, function (i, n) { source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n); }); return source; };
测试代码:
1 $.format("<div>我是字符串A我的值是{0} ,我是字符串A我的值是{1} </div>","aaa","bbb");//'<div>我是字符串A我的值是aaa ,我是字符串A我的值是bbb </div>'
关于argument:
arguments是一个对象,
不是一个数组Array 。它类似于Array,但除了length属性和索引元素之外没有任何Array属性。
1 // 由于arguments不是 Array,所以无法使用 Array 的方法,所以通过这种方法转换为数组 2 3 var args = [].slice.call(arguments); // 方式一 4 var args = Array.prototype.slice.call(arguments); // 方式二 5 6 // 下面是 es6 提供的语法 7 let args = Array.from(arguments) // 方式一 8 let args = [...arguments]; // 方式二