使用jQuery,XML,JSON,JS遍历表

Lia*_*iam 7 html javascript xml jquery json

对于误导性的标题感到抱歉,但我不确定如何写它.

我有下表...

在此输入图像描述

我想生成一个简单的计算器,用于比较来自2个给定参数的行中的所有数据.

我会要求我的用户先选择一个国家/地区,然后在该列中选择一个值.执行此操作后,您可以提交表单,它将从该给定行输出正确的值...

我试着去表达我的意思......

http://jsfiddle.net/SLCaN/2/

做这个的最好方式是什么?我所知道的唯一方法就是拥有一个巨大的if/else语句,这将使我永远写下来.

$('.country').on('change', function(){
// If USA show corrent dropdown
if( $(this).val() == 'usa'){
    $('.hiddenGrade').hide();
    $('.iniValusa').show();
} else if( $(this).val() == 'gb'){
    $('.hiddenGrade').hide();
    $('.iniValgb').show();
} else {
    $('.hiddenGrade').hide();
    $('.iniValfr').show();
}
});

$('input[type="submit"]').on('click', function(e){
    e.preventDefault();
    $('p').text('Values output here');
});
Run Code Online (Sandbox Code Playgroud)

如果你选择French,5a+你会进入5.8 and V-Diff输出......

小智 1

肯定有不同的方法可以做到这一点,但在我看来,这取决于数据结构。我个人的看法是采用包含一系列具有等级的国家/地区的数据结构。然后,等级实际上是成对的(显示值/实际值),以说明数据中的差距。这里的技巧是,我们不想在选择中显示空显示值,但我们确实需要数据(实际值)进行转换。之后,jQuery 的事情就非常简单了。

数据是这样的:

var countryGrades = [
    { country : "France", grades : [ 
        ["4", "4"], 
        ["", "4"], 
        ["5a", "5a"], 
        ["5a+", "5a+"], 
        ["5b", "5b"],
        ["5b+", "5b+"], 
        ["5c", "5c"],
        ["5c+", "5c+"],
        ["6a", "6a"],
        ["6a+", "6a+"],
        ["6b", "6b"] 
    ]},
    { country : "USA", grades : [ 
        ["5.6", "5.6"], 
        ["", "5.6"], 
        ["5.7", "5.7"], 
        ["", "5.7"], 
        ["5.8", "5.8"], 
        ["", "5.8"], 
        ["5.9", "5.9"], 
        ["5.10a", "5.10a"], 
        ["5.10b", "5.10b"], 
        ["5.10c", "5.10c"], 
        ["5.10d", "5.10d"]
    ]},
    { country : "UK", grades : [ 
        ["", ""], 
        ["Mod", "Mod"], 
        ["Diff", "Diff"], 
        ["V-Diff", "V-Diff"], 
        ["4a", "4a"], 
        ["4b", "4b"], 
        ["4b VS", "4b VS"], 
        ["4c HVS", "4c HVS"], 
        ["5a E1", "5a E1"], 
        ["", ""], 
        ["", ""]
    ]}
];
Run Code Online (Sandbox Code Playgroud)

事件处理等如下:

function loadGrades(countryGradesIndex) {
    var gradeSelect = $("#grade");
    gradeSelect.empty();        
    $.each(countryGrades[countryGradesIndex].grades, function(index, grade) {
        if (grade[0] != "") {
            gradeSelect.append($("<option></option>").attr("value", index).text(grade[0]));
        }           
    });
}

$.each(countryGrades, function(index, countryGrade) {       
    $("#country").append($("<option></option>").attr("value", index).text(countryGrade.country));
});

$("#country").on("change", function() {
    loadGrades($("#country").val());
});

loadGrades(0);

$("#convert").on("click", function() {
    var gradeIndex = $("#grade").val();
    var gradeConversion = "";
    $.each(countryGrades, function(countryGradesIndex) {
        gradeConversion += countryGrades[countryGradesIndex].country + ": " + countryGrades[countryGradesIndex].grades[gradeIndex][1] + "<br>";
    });

    $("#conversions").html(gradeConversion);
});
Run Code Online (Sandbox Code Playgroud)

在这里查看工作中的 JSFiddle:http://jsfiddle.net/tetonraven/SVj63/