0

xml ファイルのフィルタ検索を行っています。これまでのところ、1 つの属性のみを選択すると、適切なノードを表示することに成功しました。同じ属性を 2 つ持つノードを表示したい場合、少なくとも 1 つの正しい属性を持つすべてのノードを取得します。ここに私のコードがあります:

function loadFilter(xml){
    filterResults(xml);
}

function filterResults(xml)
{
    match=true;
    var candidate = $(xml).find("candidate");
    for (var i=0;i<candidate.length;i++)
    {
        var sex_key = $("#sex").val(); 
        var sex_value = $(candidate[i]).attr("sex");

        var eye_color = $("#eye-color").val();
        var eye_color_value = $(candidate[i]).attr("eyecolor");

        var transport = $("#transport").val();
        var transport_value = $(candidate[i]).attr("transport");

        var extra = $("#extra").val();
        var extra_value = $(candidate[i]).attr("extra");

        if( checkValue(sex_key, sex_value) == true)
        {
            match = true;
            displayFilteredCandidate();
        }

        if( checkValue(eye_color,eye_color_value) == true )
        {
            match = true;
            displayFilteredCandidate();
        }

        if( checkValue(transport,transport_value) == true )
        {
            match = true;
            displayFilteredCandidate();
        }

        if( checkValue(extra,extra_value) == true )
        {
            match = true;
            displayFilteredCandidate();
        }

        function displayFilteredCandidate(){
            console.log($(candidates[i].getElementsByTagName("img")[0]));
            var candidateName = $(candidates[i]).attr("name")+" "+$(candidates[i]).attr("surname");
            var candidateImage = $(candidates[i].getElementsByTagName("img")[0]).attr("src");
            var cand = CandidateThumb(candidateName,"../candidates/"+candidateImage,candidates[i]);
            cand.data({node:candidates[i]}).click(candidateClick);
            $("#mainContent").append("<div id='candidates'></div>");
            $("#candidates").append(cand);                  
        }
    }
}

function checkValue(key, value)
{
    var match = false;

    if(key == value)
    {
        match = true;
    } else {
        match = false;
    }
    console.log(match);
    return match;
}
4

2 に答える 2

0
function filterResults(xml)
{
    var numToMatch = 2;
    var matched = 0;
    var sex_key = $("#sex").val(); 
    var eye_color = $("#eye-color").val();
    var transport = $("#transport").val();
    var extra = $("#extra").val();
    var candidate = $(xml).find("candidate").each(function(){

    if(this.attr("sex") == sex_key)
        matched++;
    if(this.attr("eyecolor") == eye_color)
        matched++;
    if(this.attr("transport") == transport)
        matched++;
    if(this.attr("extra") == extra)
        matched++;
    if(matched >= numToMatch)
        displayFilteredCandidate();
}

比較機能を使用したい場合は、クールだと思うので、次のようにすることができます。

function filterResults(xml)
{
    var numToMatch = 2;
    var matched = 0;
    var sex_key = $("#sex").val(); 
    var eye_color = $("#eye-color").val();
    var transport = $("#transport").val();
    var extra = $("#extra").val();
    var candidate = $(xml).find("candidate").each(function(){

    matched += checkValue(this.attr("sex"), sex_key);
    matched += checkValue(this.attr("eyecolor"), eye_color);
    matched += checkValue(this.attr("transport"), transport);
    matched += checkValue(this.attr("extra"), extra);
    if(matched >= numToMatch)
        displayFilteredCandidate();
}
于 2013-04-24T12:16:57.233 に答える