我有一個todo列表。每行都有一個星形圖標,您可以點擊,就像gmail一樣。這裏的區別是,如果你點擊一個星星,它應該排序到頂部(較高的優先級),但也可以通過升序阿爾法在星號組內重新排序。未星標項目排序如下,也按升序排列。除了alpha排序,一切都按預期工作。下面是我正在做的那個排序功能。我已經驗證一切工作如下除了的//由阿爾法位的排序數組...在兩個組中使用jQuery按字母順序排序
排序失敗:
function sortTasks(currList) {
var starredTasks = [];
var unstarredTasks = [];
//create arrays
$('li.task').each(function(){
if ($(this).children('img.star').attr('src') == "images/star_checked.gif") {
starredTasks.push($(this));
} else {
unstarredTasks.push($(this));
}
});
//sort the arrays by alpha
starredTasks.sort(function(a,b){ ($(a).children('p.task-name').text().toUpperCase() > $(b).children('p.task-name').text().toUpperCase()) ? 1 : -1;});
unstarredTasks.sort(function(a,b){ ($(a).children('p.task-name').text().toUpperCase() > $(b).children('p.task-name').text().toUpperCase()) ? 1 : -1;});
//draw rows starred first, unstarred second
$(currList).empty();
for (i=0; i < starredTasks.length; i++) {
$(currList).append(starredTasks[i]);
}
for (i=0; i < unstarredTasks.length; i++) {
$(currList).append(unstarredTasks[i]);
}
}
此數組已被填充與任務行按照它們最初繪製的順序。數據呈現良好,但基本保持相同的順序。
例任務行:
<div id="task-container" class="container">
<form name="enter-task" method="post" action="">
<input id="new-task" name="new-task" type="text" autofocus>
</form>
<h2 id="today">today</h2>
<ul id="today-list">
<li id="457" class="task">
<img class="star" src="images/star_checked.gif">
<p class="task-name" contenteditable>buy milk</p>
<p class="task-date"> - Wednesday</p>
</li>
</ul>
<h2 id="tomorrow">tomorrow</h2>
<ul id="tomorrow-list">
</ul>
<h2 id="future">future</h2>
<ul id="future-list">
</ul>
<h2 id="whenever">whenever</h2>
<ul id="whenever-list">
</ul>
</div>
的starredTasks陣列中的每一項是一個完整的任務行。我假設$(a)
與$(li)
的水平相同?
和這裏的觸發排序功能:
$('body').on('click', 'img.star', function(){
var thisList = '#' + $(this).parent('li').parent('ul').attr('id');
if ($(this).attr('src') == 'images/star_checked.gif') {
$(this).attr('src', 'images/star_unchecked.gif');
} else {
$(this).attr('src', 'images/star_checked.gif');
}
sortTasks(thisList);
});
而且,我懷疑這是值得一提,但數據存儲在MySQL的,並通過PHP預先填充。
我不知道的方式來使用.sort()
直接在$('li')
不拆分爲獨立數組...
任何人看到我的穿幫?
感謝您的迴應!我正在做一個'.append()'。我沒有發佈所有代碼,以便於閱讀。我證實了其他一切正在發揮作用,並將其縮小到我的排序邏輯。同名的多個ID肯定是個問題。我會把它改成一堂課。好地方!我會試一試你的方法。 – 5PalmTechnique
我們確實需要一個完全重現問題的最小示例。否則,我們只是在浪費時間來猜測你的問題。另外,請報告您可能具有的任何控制檯錯誤。 –
已更新以顯示功能。我真的只是在分類邏輯方面遇到問題,而不想分散WIP位。這是我的第一篇文章,所以我還沒有得到禮節。謝謝你的幫助。 ;)因此,我更新了sortTasks()函數以使用您的邏輯,並且像我的原始函數一樣,它按星號正確排序任務,但alpha仍然不起作用......我不知道我錯過了什麼。沒有控制檯錯誤。 – 5PalmTechnique