2010-08-17 33 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