Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在jquery中仅获取筛选结果?_Jquery - Fatal编程技术网

如何在jquery中仅获取筛选结果?

如何在jquery中仅获取筛选结果?,jquery,Jquery,我正在对xml文件进行筛选搜索。到目前为止,如果仅通过一个属性选择,我已经成功地显示了右侧节点。Bur当我想显示具有两个相同属性的节点时,我会得到至少具有一个右属性的所有节点。这是我的密码: function loadFilter(xml){ filterResults(xml); } function filterResults(xml) { match=true; var candidate = $(xml).find("candidate"); for (

我正在对xml文件进行筛选搜索。到目前为止,如果仅通过一个属性选择,我已经成功地显示了右侧节点。Bur当我想显示具有两个相同属性的节点时,我会得到至少具有一个右属性的所有节点。这是我的密码:

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;
}
函数加载过滤器(xml){
过滤结果(xml);
}
函数filterResults(xml)
{
匹配=真;
var-candidate=$(xml).find(“candidate”);

对于(var i=0;i,这是因为只要一个属性匹配,就将match设置为true

if (
    checkValue(sex_key, sex_value) == true &&
    checkValue(eye_color,eye_color_value) == true &&
    checkValue(transport,transport_value) == true &&
    checkValue(extra,extra_value) == true
) {
    match = true;
    displayFilteredCandidate();
}
这样,您可以检查所有属性,并仅在所有属性匹配时显示候选属性

编辑:如果您想匹配至少两个,请像

if (
    checkValue(sex_key, sex_value) +
    checkValue(eye_color,eye_color_value) +
    checkValue(transport,transport_value) +
    checkValue(extra,extra_value)
    >= 2
) {
    match = true;
    displayFilteredCandidate();
}
(这是基于这样一个事实:如果将布尔值与a+相加,它们将变成整数(1表示真,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(){

    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();
}

你听过jQuery中的
.filter()
。?嘿,谢谢你的答案,但仍然不起作用,但我会在这个方向上尝试更多。再次感谢你的答案,威廉。你的方法最终效果很好。真的谢谢。很好,很高兴我能帮上忙!请向上投票,并单击答案左侧的复选标记接受它。
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();
}