2012-02-29 16 views
0

을 설정합니다. 이어야 하나 개의 단어가 포함 된 S :이 필터는 이미 모든 .single '의나는 자바 스크립트 기반의 필터를 쓰고 있어요

//take them off dom, manip and put them back 
singles.detach().each(function(i) { 
    var $this = $(this); 

    //make sure everything is visible 
    $this.show(); 

    //if this template is not included OR if this index number does not meet the treshold 
    if($.inArray(i, included) == -1 || treshold >= templates[i].score) { 
     $this.hide(); 
    } 
}).appendTo(container); 

배열 included.single의 모든 인덱스 포함 단어를 포함하지 않는 S'를 숨 깁니다. 배열 templates에는 .single에 해당하는 모든 텍스트와 관련성 및 단어 수를 기준으로 한 개체가 포함되어 있습니다. 예를 들어 :

templates = [ 
    { text: ['long string', 'long string 2'], score: 5 }, 
    { text: ['sf sd', 'gdasd'], score: 3 } 
] 

(그래서 모든 인덱스는 DOM에서 발생하지 않습니다)

지금 내가 원하는, 또는 다른 말로하면이 점수에 따라 세트를 정렬하는 것입니다 온 가장 높은 점수 상단. 세트의 각 요소 색인은 templates (모든 점수 포함)의 색인과 같습니다.

답변

1

당신은 내가 뭔가를 누락 될 수 있습니다

이 가
function scoreSort(a, b) { 
    return $(a).data('score') > $(b).data('score') ?1 :-1; 

} 

singles.sort(scoreSort); 

/* now replace html*/ 

container.append(singles); 
가 , 당신이 말하는 정렬 $ .each

$(this).data('score', templates[i].score); 

그런 다음 점수를 사용할 수있는 사용자의 데이터 같은 요소()의 점수를 추가하는 경우 당신은 색인 순서가 templates 인 색인 순서를 원하지만 templates의 색인을 사용하여 $ .each의 색인을 사용하는 순서대로되어 있어야합니다.

+0

저는 $ .each()가 아닌 $ (elem) .each()를 사용하고 있습니다.(). 템플릿과 세트는 이미 동일한 순서로되어 있으므로 '데이터'(팁을 주셔서 감사합니다)를 사용하여 점수를 바인딩 할 수 있습니다. 그러나 당신이 제안한 정렬은 점수를 정렬하지 않고 대신 다른 결과를 보여줍니다 (이유는 알 수 없습니다). – askmike

+0

간단한 데모에서 시도해 보았습니다. http://jsfiddle.net/bKfwv/ – charlietfl

+0

네 말이 맞아. 그럼 내 다른 코드 여야합니다. 솔루션을 가져 주셔서 감사합니다! – askmike

관련 문제