Sve*_*ven 2 javascript string jquery loops function
我正在使用jQuery从xml文件中获取数据并将其保存为字符串.字符串是一个switch语句,我想成为一个函数.
$.get('type.xml', function(xml) {
var cases=[];
$(xml).find('type').each(function(){
index=parseInt($(this).find('earn').text());
if($.isArray(cases[index])){
cases[index].push($(this).find('name').text());
}else{
arr=$.makeArray($(this).find('name').text());
cases[index]=arr;
}
});
var autoearn="function(x){switch(x){";
for(i=0;i<=100;i+=5){
if($.isArray(cases[i])){
$.each(cases[i], function(index,v){
autoearn+='case "'+v+'":';
});
autoearn+='$("input[name^=\'earn\']").val('+i+');break;';
}}
autoearn+='}}';
});
Run Code Online (Sandbox Code Playgroud)
第一部分创建一个2D数组,通过索引将一组案例与其结果输出相关联.因此,收入10美元(例如会议)的东西将被存储在案例[10]中(会议=案例[10] [0]).
第二部分写了一个字符串,将一个put放入一个看起来像这样的switch语句:
function(x){
switch(x){
case "Meeting":
$("input[name^='earn']").val(10);
break;
case "Event1":
case "Event2":
$("input[name^='earn']").val(20);
break;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,switch case的语法使Event1和Event2具有相同的结果.
现在autoearn只是一个包含我想要的函数代码的字符串.怎么做成功能?有一个更好的方法吗?我想送它通过PHP返回回jQuery的,但是这整个事情似乎真的间接的,有可能是一个更简单的方法来做到这一点.
首先,确保字符串中的代码是可信的,否则您将通过执行任意代码遇到问题.
您可以从字符串创建函数,如下所示:
var f = new Function('arg1', 'arg2', ..., 'function code');
Run Code Online (Sandbox Code Playgroud)
以上相当于:
function f(arg1, arg2, ...) {
function code
}
Run Code Online (Sandbox Code Playgroud)
在您的情况下,您可能希望function(x)从autoearn字符串中删除和打开/关闭大括号,并创建如下函数:
new Function('x', autoearn)
Run Code Online (Sandbox Code Playgroud)