Как изменить порядок элементов в соответствующем наборе jQuery - PullRequest
0 голосов
/ 29 февраля 2012

Я пишу фильтр на основе JavaScript:

Существует множество элементов div с классом .single, которые содержат несколько текстовых элементов. Фильтр уже скрывает все .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, которые содержат как минимум одно слово. Массив templates содержит объекты со всем текстом на .single и оценкой, основанной на релевантности и количестве слов. Например:

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

(Таким образом, все индексации не происходят в DOM)

Теперь я хочу отсортировать набор на основе этой оценки, или, другими словами: наивысшая оценка сверху. Индекс каждого элемента в наборе совпадает с индексом в templates (который содержит все оценки).

1 Ответ

1 голос
/ 29 февраля 2012

Если вы добавите оценку к элементам как data () в вашем $ .each

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

Вы можете затем использовать оценки для сортировки

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

}

singles.sort( scoreSort);

/* now replace html*/

container.append( singles);

Я могу что-то упустить, вы говорите, что хотите, чтобы они были в порядке индекса templates, но они уже должны быть в таком порядке, чтобы вы могли посмотреть на оценки в templates, используя индекс в $ .each

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...