我正在尝试实现一个将改变表中元素顺序的函数。逻辑非常简单:每个TR(除了第一个和最后一个)都有一个button_up和一个button_down。当用户单击其中一个按钮时,该元素将使用上方或下方的位置更改其位置。
要做到这一点,我使用的是jQuery,每个TR都有一个唯一的ID,按钮有一个共同的类。
单击具有特定类的按钮时,我正在执行此JavaScript代码:
$('.upArrow').click( function(something)
{
var id = $(this).attr("id");
var n=id.split("_");
var new_id = '#row_'+n[1];
var parent =$(new_id);
var prev = $(new_id).prev();
swap(prev, parent);
init_authors_list_ordering();
});
$('.downArrow').live('click', function()
{
var id = $(this).attr("id");
var n=id.split("_");
var new_id = '#row_'+n[1];
var parent =$(new_id);
var next = $(new_id).next();
swap(next, parent);
init_authors_list_ordering();
});
}
function swap(a, b, direction)
{
var html = a.wrapInner('<tr></tr>').html();
a.replaceWith(b.wrapInner('<tr></tr>').html());
b.replaceWith(html);
}
问题在于:第一次,一切正常(我的功能尚未完成,我必须在变化时设置一些其他参数,但逻辑就在那里)。但是,改变位置的两个元素已经失去了TR的身份,所以他们不能再被触动了。
我不知道为什么id丢失了。这是replaceWith()方法。
欢迎任何帮助。谢谢。
答案 0 :(得分:1)
要交换元素,只需执行以下操作:
function swap(a, direction, b) {
a[direction](b);
}
并打电话:
var firstElem = $('#divID'),
secondElem = $('#divID');
swap(firstElem, 'before', secondElem); // or after, whatever you need ?
答案 1 :(得分:0)
您的常量<tr></tr>
没有id属性,因此最终没有id属性。
编辑: 这是我的参考:
function swap(a, b, direction)
{
var html = a.wrapInner('<tr></tr>').html();
a.replaceWith(b.wrapInner('<tr></tr>').html());
b.replaceWith(html);
}