0

在 JQuery 中,我们可以缓存选择器返回的几乎所有对象,在我的例子中,我<tr>将选定元素(<tbody>在表中)的子元素(s)缓存在一个名为rows.

然后我在 this 上调用 JQuery 方法rows,这些方法操作各个行。例如,如果总共有 5 行,我想交换第一行和最后一行:

rows.eq(4).after(row1);
rows.eq(0).before(row5);

但是,这不起作用。第一行到达底部,但底行没有到达顶部。

它的作用是在每次操作时获取孩子的新副本。对比见:http: //jsfiddle.net/QNS5G/

是什么导致这里的缓存方法出现问题?

4

3 回答 3

2

更改 DOM 中的行顺序后,jQuery 对象中的顺序不会更改。

所以t1_rows.eq(4).after(t1_row1);将第一行移到底部(第 1行在 jQuery 对象的第五行之后)。然后t1_rows.eq(0).before(t1_row5);尝试将最后一行放在第1 行之前。由于它已经存在,因此您看不到任何更改。

也许你在想之后的el.after(something)地方,但反过来说,它实际上是在之后的地方。elsomethingsomethingel

于 2013-10-17T19:53:06.437 回答
1

让我把你的代码翻译成英文。

  1. 首先,取第 1 行并在第 5 行之后插入
  2. 然后,取第 5 行并将其插入到第 1 行之前

第二个操作什么也不做,因为 row1 已经移到列表的底部。它已经在第 5 行之前。

于 2013-10-17T19:53:35.827 回答
0
var tbody = $(document.getElementById('t1_parent')),
    first_row = tbody.find('tr:eq(0)'),
    last_row = tbody.find('tr:eq(4)');

last_row.prependTo(tbody);
first_row.appendTo(tbody);

编辑:

没关系。找到了另一种解决方案。

于 2013-10-17T20:02:52.323 回答