使用json填充switch case数据

Bec*_*cky 5 javascript jquery json

我正在尝试使用json添加switch case.我如何填充数据?

这是预期的输出:

$(".custom-menu li").click(function(){
     switch($(this).attr("data-action")) {
     // A case for each action.
         case "Science": $('.abc:eq(0)').trigger('click',['Zoology']); break;
         case "Science": $('.abc:eq(1)').trigger('click',['Botany']); break;
         case "Maths": $('.abc:eq(2)').trigger('click',['Geometry']); break;
     }
});
Run Code Online (Sandbox Code Playgroud)

这是结构:

$(".custom-menu li").click(function(){
     switch($(this).attr("data-action")) {
       //looking to populate data here
     }
});
Run Code Online (Sandbox Code Playgroud)

JQ

var val;
$.ajax({url: 'subjects.json'}).done(function(d) {
    val = d;
    $.each(val, function(i, su) {
      $('case "'+su[0]+'": $('.content:eq(0)').trigger('click',['+su[1]+']); break;')
      .appendTo('data-action'); //How to refer $(this).attr("data-action")
    });
});
Run Code Online (Sandbox Code Playgroud)

JSON:

[ [ "Science", "Zoology"],
[ "Science", "Botany"],
[ "Maths", "Geometry"] ]
Run Code Online (Sandbox Code Playgroud)

Sar*_*aaz 0

不确定您要使用开关盒。可以使用 for 循环和 if

var jsonString = '[ [ "Science", "Zoology"],[ "Science", "Botany"],[ "Maths", "Geometry"] ]';
var keyValuePairs = JSON.parse(jsonString)
for(var i = 0, l = keyValuePairs.length; i < l; i++)
{
    if($(this).attr("data-action") == keyValuePairs[i][0])
        $('.abc:eq(' + i + ')').trigger('click',[keyValuePairs[i][1]);
}
Run Code Online (Sandbox Code Playgroud)

注意: 请记住,this除非它在您上面指定的函数内,否则不会评估

编辑: 使用 eval 切换大小写版本。请记住,使用 eval 是不受欢迎的

var codeToEval = "";
var codeHead = '$(".custom-menu li").click(function(){\
     switch($(this).attr("data-action")) {\
     // A case for each action.'
var part1 = 'case "', part2 = '": $(".abc:eq("';
var part3 =  '").trigger("click",["', part4 = '"]); break;';
var codeFoot = '});'
codeToEval = codeHead;
for(var i = 0, l = keyValuePairs.length; i < l; i++)
{
    codeToEval += part1 + keyValuePairs[i][0] + part2 + i +
            part3 + keyValuePairs[i][1] + part4;
}
codeToEval += codeFoot;
eval(codeToEval);
Run Code Online (Sandbox Code Playgroud)

这将在全局范围内运行代码,但以您所描述的代码的格式构建一个字符串