我有兩個彼此相鄰的有序列表。使用jQuery按字母順序動態插入到列表中
當我從一個列表中取出一個節點時,我想按字母順序將其插入到另一個列表中。問題的關鍵是我想只取出一個元素,並將其放回到另一個列表中,而不刷新整個列表。
奇怪的是,當我插入到右側的列表中時,它可以正常工作,但是當我插入到左側列表中時,順序永遠不會出現正確。
我也試過將所有東西都讀入數組並在那裏排序,以防萬一children()方法沒有按照它們顯示的順序返回東西,但我仍然得到相同的結果。
這裏是我的jQuery:
function moveNode(node, to_list, order_by){
rightful_index = 1;
$(to_list)
.children()
.each(function(){
var ordering_field = (order_by == "A") ? "ingredient_display" : "local_counter";
var compA = $(node).attr(ordering_field).toUpperCase();
var compB = $(this).attr(ordering_field).toUpperCase();
var C = ((compA > compB) ? 1 : 0);
if(C == 1){
rightful_index++;
}
});
if(rightful_index > $(to_list).children().length){
$(node).fadeOut("fast", function(){
$(to_list).append($(node));
$(node).fadeIn("fast");
});
}else{
$(node).fadeOut("fast", function(){
$(to_list + " li:nth-child(" + rightful_index + ")").before($(node));
$(node).fadeIn("fast");
});
}
}
這裏是我的html的樣子:
<ol>
<li ingredient_display="Enriched Pasta" ingredient_id="101635" local_counter="1">
<span class="rank">1</span>
<span class="rounded-corners">
<span class="plus_sign"> + </span>
<div class="ingredient">Enriched Pasta</div>
<span class="minus_sign"> - </span>
</span>
</li>
</ol>
您是否嘗試過使用調試器來逐步通過您的代碼,並確保您的每一個(...)回調函數正確行爲? Firebug或IE8開發者工具對此非常有用。您可以在回調的主體中放置一個斷點。 – RMorrisey 2010-05-22 02:41:43
我檢查了w3c。我找不到任何提及的'ingredient_display','ingredient_id'或'local_counter'屬性。除此之外,這是一些可怕的html。我希望這不會進入生產的某個地方:\ – Jason 2010-05-22 03:11:00
我已經通過使用螢火蟲,由於某種原因,他們沒有以正確的順序回來的其中一個有序列表。也許我應該通過getElementById來代替。 @jason,這不是生產。這些是用戶定義的屬性。你會如何建議解決這個問題? – Dex 2010-05-22 04:13:19