JQuery:在使用replaceWith()方法时丢失了id

时间:2012-12-07 13:04:33

标签: javascript jquery html

我正在尝试实现一个将改变表中元素顺序的函数。逻辑非常简单:每个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()方法。

欢迎任何帮助。谢谢。

2 个答案:

答案 0 :(得分:1)

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

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

并打电话:

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

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

FIDDLE

答案 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);
}