0

我正在尝试实现一个将更改表中元素顺序的函数。逻辑很简单:每个 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,不能再动了。

我不知道为什么ID丢失了。这是 replaceWith() 方法。

欢迎任何帮助。谢谢你。

4

2 回答 2

1

要交换元素,只需执行以下操作:

function swap(a, direction, b) {
    a[direction](b);
}

并调用:

var firstElem  = $('#divID'),
    secondElem = $('#divID');

swap(firstElem, 'before', secondElem); // or after, whatever you need ?

小提琴

于 2012-12-07T13:20:17.927 回答
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);
}
于 2012-12-07T13:11:43.057 回答