2013-05-01 39 views
2

我想一个<table>看起来像这样内<tr>元素进行排序:使用append()来排序列表

之前

<table> 
    <tbody> 
    <tr id="foo">...</tr> 
    <tr id="bar">...</tr> 
    <tr id="baz">...</tr> 
    <tr id="qux">...</tr> 
    </tbody> 
</table> 

假设我要到行,以便进行排序表变成这样:

<table> 
    <tbody id="table"> 
    <tr id="foo">...</tr> 
    <tr id="qux">...</tr> 
    <tr id="baz">...</tr> 
    <tr id="bar">...</tr> 
    </tbody> 
</table> 

我可以使用jQuery脚本序列做到这一点:

$('#table').append($('#qux')); 
$('#table').append($('#baz')); 
$('#table').append($('#bar')); 

,但我想使脚本到一个,当我尝试:

$('#table').append($('#qux,#baz,#bar')); 

原始表,它似乎没有任何效果。为什么这不起作用?有一种方法可以在一个命令中执行此操作吗?

+1

u能试试吗? $('#table')。append($('#qux')+ $('#baz'));没有尝试,但猜测.. – sree 2013-05-01 08:16:46

+0

http://stackoverflow.com/a/3160718/1104483 – 2013-05-01 08:26:46

回答

1

这工作:

$('#table').append($('#qux'),$('#baz'),$('#bar')); 

如果你试试这个,用调试器检查元素

var elements = $('#qux, #baz, #bar'); 
$('#table').append(elements); 

你可以看到什么jQuery是这样做的:它加载从您选择的元素,但它们是按照它们在DOM中出现的顺序排列! (酒吧,巴兹和奎兹)。 所以追加方法正在工作,但它是以相同的顺序追加它们!

0

你可以连续使用jQuery方法:

$('#table').append($('#qux')).append($('#baz')).append($('#bar')); 
1

从文档

The order of the DOM elements in the returned jQuery object may not be identical, as they will be in document order.

那么,你是在他们已经是相同的顺序进行添加。

1

好吧,我做了一些测试,并在这里就是为什么它不工作,你所希望的方式:

http://jsfiddle.net/9V2Xr/ 在这里,你可以看到,如果它要想在DOM(这是第一次尝试从另一张桌子),它的作品。

但随后http://jsfiddle.net/9V2Xr/1/这里,如果这是你原来的表,你可以看到,当你做

var sort = $('#qux,#baz,#bar').detach(); 
console.log(sort); 

在日志中,你会发现bar然后baz最后qux。 结论,它需要的顺序从DOM

编辑 基本上,我的测试是没有用的,it'es解释in the doc

所以,主要的解决办法是链接append()或使用多个选择$('#qux'), $('#baz'),$('#bar')而不是$('#qux,#baz,#bar')

+0

感谢您的解释。现在很清楚。 – sawa 2013-05-01 08:27:08