javascript - 如何使用 string.format 动态生成 jquery 的第 n 个参数

标签 javascript jquery

我正在尝试用受尊重的值替换元素占位符,这对于硬编码来说效果很好,如 snippet 1 中所示,

我需要使其适用于动态查找snippet 2,3。即,如果两个变量uiStructure、arrItem都是动态生成的,那么如何处理它。

<强> JS FIDDLE

代码片段 1:

var uiStructure = "<div class='cntHolder'><h1>{0}<h1><div class='descDiv'>{1}</div></div>";
var arrItem = [];
    arrItem[0] = "label";
    arrItem[1] = "desc";

for (var i = 0; i < vWork.length; i++) {
 // how to set this dynamically, depend on arrItem 
  var getData = String.format(uiStructure, vWork[i].label, vWork[i].desc); 
  console.log(getData);
}
<小时/>
if (!String.format) {
                String.format = function (format) {
                    var args = Array.prototype.slice.call(arguments, 1);
                    return format.replace(/{(\d+)}/g, function (match, number) {
                        return typeof args[number] != 'undefined' ? args[number] : match;
                    });
                };
            }
<小时/>

动态生成,有多种可能性,如下所示:

代码片段 2:

var uiStructure = "<div class='cntHolder'><div class='imgDiv'>
<img src='{0}' alt='pic' /></div><div class='descDiv'>{1}</div>
<span>{2}</span> </div>";
var arrItem = [];
    arrItem[0] = "badge";
    arrItem[1] = "desc";
    arrItem[2] = "tagline";

代码片段 3:

var uiStructure = "<div class='cntHolder'><div class='imgDiv'><img src='{0}' alt='pic' 
/></div><div class='descDiv'>{1}</div></div>";
var arrItem = [];
    arrItem[0] = "badge";
    rrItem[1] = "desc";



  var vWork = [
            {

                label: "CEO",
                desc: "Higher Command",
                tagline: "The boss ",
                priority: "High",
                badge: "../01;jpg"
            },
            {
                label: "Developer",
                desc: "Programming developer",
                tagline: "Developer rocks",
                priority: "Medium",
                badge: "../02;jpg"
            },
            {
                label: "HR",
                desc: "Human resource",
                tagline: "Developer hate HR",
                priority: "Medium",
                badge: "../03;jpg"
            },
            {
                label: "Chairman",
                desc: "Boss of Boss",
                tagline: "no tagline available lol",
                priority: "Very High",
                badge: "../04;jpg"
            }
        ];

最佳答案

尝试使用这种方法来获取动态属性名称:

for (var i = 0; i < vWork.length; i++) {
    var props = arrItem.map(function(prop) {
        return vWork[i][prop];
    });
    var getData = String.format.apply(null, [uiStructure].concat(props));
    console.log(getData);
}

它是如何工作的。您有一个键数组 arrItem。在每次迭代中,您都希望获得 vWork[i] 的相应值。 Array.prototype.map允许您将键数组转换(它实际上返回新数组)为来自 vWork 的值数组。所以 props 看起来像这样:

["Chairman", "Boss of Boss"] 

最后你使用Function.prototype.apply因为您想调用 String.format 函数,以数组形式提供参数。

演示:http://jsfiddle.net/7q3znvqk/2/

关于javascript - 如何使用 string.format 动态生成 jquery 的第 n 个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26795739/

相关文章:

javascript - 字符串不是对象那么为什么它们有属性呢?

javascript - 文本框 css 悬停和按钮显示 asp.net c#

jquery - "Select/Unselect"多选字段

javascript - 如何在Jquery中向回调函数传递参数?

javascript - 将 Select2 与 Jeditable 结合使用

javascript - 从数组的值创建数组

javascript - JS 中输入意外结束

javascript - 如果前面没有 's',则替换单词末尾的 's'

javascript - 如何使用 eventChannel 将函数传递给 redux-saga 中的回调

javascript - 单击按钮时.show() 不起作用