2010-08-17 94 views
2

我一直在研究這個jsFiddle並希望擴展功能,以便當列表項被更改並通過表單提交時,相關表tbodys會自行排序以相同的順序作爲其列表項的同行:按照與列表元素相同的順序排序表tbody的順序jquery json

http://jsfiddle.net/8vWXZ/20/

是否有可能從一個元素的順序映射到另一個像這樣的jQuery的?

我對動畫的東西沒有興趣,但是這個新的要求讓我有些不解。

+0

我試圖解決這個問題,並更新了這裏的jsFiddle: http:// jsfiddle。淨/ 8vWXZ/22/ 我想使用該插件位於: http://stackoverflow.com/questions/929519/dynamically-arranging-divs-using-jquery/929607#929607 但。不想打球對我來說:( – RyanP13 2010-08-17 16:59:02

回答

1

我沒有得到ajax調用應該做的事情,所以我跳過了這部分。但是根據列表順序依據表格的邏輯在表單的提交操作上存在。我還重新組織瞭如何使用tbody標籤,因爲它並不真正有助於讓每個tr位於其自己的tbody標籤內。

更新的jsfiddle:http://jsfiddle.net/8vWXZ/24/

的代碼,這裏有它的SO:
#tableOrder是其tr小號我們是根據li S的的ul#reOrder內的順序進行重新排序表)

$('#frmItems').submit(function() { 

    var tbl = $("#tableOrder tbody"); 

    $("#reOrder li").each(function(index) { 
     var li_id = $(this).attr("id"); 
     //Find the number of the item. Eg "item4" should result in "4" 
     var li_item_number = li_id.match(/item([0-9]*)/)[1]; 
     //Inside #tableOrder, find the element (a <tr>) with id corresponding the this <li>'s id. Eg "item4"'s corresponding table row's id is "#tbl-item4" 
     var correspondingTR = tbl.find("#tbl-item" + li_item_number); 

     tbl.append(correspondingTR); 
    }); 

我也做了一個更多的修改。由於ID應該是唯一的,因此您已將li元素和tr元素都設置爲相同的ID(例如item1),這很糟糕(mmkay)。因此,我將tableOrder中的tr s更改爲ID tbl-item1等。

li_id.match(/item([0-9]*)/)[1]regex的匹配項。基本上,它在字符串中搜索一個模式,我們可以從該字符串中繪製某些部分。是什麼樣子的是斜線內的模式,所以它尋找類似itemX其中X是一個數字([0-9]說,我們感興趣的任何數量從0到9)。它會返回一個數組,並在指數1該項目是我們感興趣的數量

關於append
.each穿過li s,這是在正確的爲了。對於每一個,它將相應的tr添加到該表的。因爲表格中的所有tr將被「觸摸」,這意味着它從頭開始構建tr的順序。第一個tr被附加,是頂部的一個。最後一個要添加的是底部的那個(如tr,現場附加在迭代中n) 我做了兩個演示,其有效性值得懷疑,但您可能會發現它們很有幫助。 http://jsfiddle.net/bGGRT/http://jsfiddle.net/bGGRT/1/

+0

這是偉大的謝謝 我能麻煩您發表評論有點以及 我不明白這一點:? VAR li_id = $(本)。 attr(「id」)。match(「item([0-9] *)」)[1]; 或者append是如何在這裏工作的? – RyanP13 2010-08-17 17:23:47

+0

對不起,AJAX調用是爲了別的東西,忽略。 – RyanP13 2010-08-17 17:24:19

+0

更新:)添加有關附加的評論 – 2010-08-17 17:49:02