2011-09-17 145 views
2

我使用jQuery UI排序,以使菜單排序更改列表項的ID。根據它使用jQuery當前位置排序

我想要的列表項的ID設置爲自己的當前位置或索引,以便以後我可以在我的數據庫更新其位置值。但是,當我使用螢火蟲檢查html輸出時,id不會更改爲索引值。

所以,如果,例如,如果我在li.home前面拖li.news,它的ID應該更改爲0和家庭的id爲1

HTML:

<ul id="menu" class="sortable editable"> 
<li class="home" id="0"> 
<a href="index.php?page=home">home &raquo;</a> 
</li> 
<li class="news" id="1"> 
<a href="index.php?page=news">news &raquo;</a> 
</li> 
<li class="about us" id="2"> 
<a href="index.php?page=about-us">about us &raquo;</a> 
</li> 
</ul> 

jQuery的

$('.sortable > li').each(function() { 
    var index = $(this).index(); 
    $(this).attr('id', index); 
}); 

我如何將能夠將ID設置爲它的當前位置的任何想法?

回答

1

首先,除非你假定一個HTML5的基線,開始與多家ID是尚未生效。行爲將是不可預測的。如果你絕對必須使用這種方法,我會允許這些ID對應於某個適當的唯一自然鍵,然後使用jQuery的data()函數將信息附加到每一行。

$('.sortable > li').each(function(i,v) { 
    $(this).data('sort-position',i); 
}); 

要檢索:

$('li#something').data('sort-position'); 

但更重要的是,沒有任何理由,我可以看到狀態信息移動到DOM;它造成了一個不好的數據庫,並且暴露了狀態表示與物理順序不同步的風險。爲什麼不只是允許重新排序過程,並且當您想要更新後端數據庫時,請直接使用每個元素的索引?

+0

這是有道理的,猜猜我是過度複雜的事情,而我可以直接使用索引。謝謝你的提示。 – Xorp25

2

試試這個

$('.sortable > li').each(function(index, value) { 
    $(this).attr('id', 'item_'+index); 
});