2013-04-24 5 views
0

xml 파일을 통해 필터를 검색하고 있습니다. 지금까지 나는 하나의 속성으로 만 선택하면 올바른 노드를 표시하는 데 성공했습니다. Bur : 두 속성이 동일한 노드를 표시하려면 하나 이상의 올바른 속성을 가진 모든 노드를 가져옵니다. 를 heres 내 코드 : 당신이 때마다 속성 하나 일치 true로 경기를 설정하기 때문이다jquery에서 필터링 된 결과 만 얻으려면 어떻게해야합니까?

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; 
} 
+0

jQuery에서'.filter() '소리를 들었습니까? –

답변

0

. 모든 속성에 대한 확인 만 모든이 일치하는 속성 경우 후보를 표시하도록 할

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

(이것은 당신이 +로 논리 값을 추가 할 경우, 그들은 사실에 대한 정수 (1되고 있다는 사실을 기반으로처럼 그것을 할 거짓에 대한, 0))

+0

hej. 답변을 주셔서 감사합니다,하지만 여전히 작동하지 않지만 나는이 방향으로 더 많은 것을 시도 할 것입니다. – user2315366

+0

내 업데이트보기, 원할 수도 있습니다. –

+0

귀하의 답변에 다시 한 번 감사드립니다. Willem의 방법은 결국 훌륭하게 작동했습니다. 정말 고마워. – user2315366

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

당신이 당신의 비교 기능을 사용 싶다면 내가 생각하고 내가 그냥 멋진 생각하기 때문에, U이 할 수있는 :.

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(); 
} 
관련 문제