Javascript 切换表格行的位置只工作一次

Javascript 切换表格行的位置只工作一次,javascript,jquery,Javascript,Jquery,我做了一个决定 我有一张有两张桌子的桌子。我可以让用户通过点击向上或向下箭头来改变位置排序 但是,当我交换一次位置时,我无法再更改已更改行的位置 以下是函数: function switchPosition( data, direction ) { var tableName = "artikelposition"; currentPosition = parseInt( data['position'] ); if( direction == "up" ) {

我做了一个决定

我有一张有两张桌子的桌子。我可以让用户通过点击向上或向下箭头来改变位置排序

但是,当我交换一次位置时,我无法再更改已更改行的位置

以下是函数:

function switchPosition( data, direction )
{
    var tableName = "artikelposition";
    currentPosition = parseInt( data['position'] );

    if( direction == "up" )
    {
        newPosition = currentPosition - 1;
    }
    else if( direction == "down" )
    {
        newPosition = currentPosition + 1;
    }

    var otherTr = $("tr[data-position='" + newPosition + "']").data("artikelid");
    console.log("clicked object" + data['artikelid'] + " : current position " + data['position'] + " : new position " + newPosition);
    console.log("other objekt" + $("#" + otherTr).data("artikelid") + " : current position " + $("#" + otherTr).data("position") + " : new Position " + currentPosition);

    $( "#" + data['artikelid'] )
        .data({
            "position": newPosition
        });
    $( "#" + data['artikelid'] + " td.tdArticleNumber span.spanPositionNummer" )
        .html( newPosition );


    $( "#" + otherTr )
        .data({
            "position": currentPosition
        });
    $( "#" + otherTr + " td.tdArticleNumber span.spanPositionNummer" )
        .html( currentPosition );

    sortTable( tableName );
}

您可能可以用更少的代码来完成这一点(请参阅):

您可以将单击处理程序附加到图像,并使用
insertBefore()
移动行。您还可以使用内置的
index()
功能(而不是摆弄
数据位置
)来设置位置编号
span

(根据客户的回答)


或者,如果您想对现有代码执行此操作,那么错误似乎是您选择了错误的
otherTr

第一次单击顶行上的向下箭头时,可以在控制台中看到所选行从位置1移动到位置2,中间行从位置2移动到位置1:

Angeklicktes Objekt2445 : aktuelle Position 1 : neue Position 2 (index):59
Anderes Objekt2501 : aktuelle Position 2 : neue Position 1 (index):60
但是,当您单击现在最上面一行上的底部箭头时,控制台会记录以下内容:

Angeklicktes Objekt2501 : aktuelle Position 1 : neue Position 2 (index):59
Anderes Objekt2501 : aktuelle Position 1 : neue Position 1 (index):60

请注意,顶行(正确)从位置1移动到位置2。但紧接着,同一行(
Objekt2501
,由同一位置引用)被指示从1移动到1。

正如ASGM已经提到的,问题在于
其他TR
。在这方面:

var otherTr = $("tr[data-position='" + newPosition + "']").data("artikelid");
我仍然不知道为什么这个表达式总是返回第一个
tr
data artikelid
,但是如果你想保存你的代码,那么你可以使用如下内容替换这一行:

$("#artikelposition tr").each(function()
{
    var that = $(this);
    if (that.data("position") == newPosition)
    {
        otherTr = that.data('artikelid');
    }
});

正如Pawel所说,问题在于数据位置是动态设置的。但是,即使是他使用
$(“…”).attr(“数据-…”,值)
的想法在那里似乎也不起作用。

更优雅的代码,这是肯定的:)但我仍然不明白为什么原始代码不能很好地工作,以防OP想要的解决方案。@ASGM是的,谢谢,尽管您的解决方案不仅更加优雅,但是也可以防止
newPosition=-1
newPosition=4
非常感谢。这是正确的代码。因为我的ajax函数需要tr的id。代码是有效的
$("#artikelposition tr").each(function()
{
    var that = $(this);
    if (that.data("position") == newPosition)
    {
        otherTr = that.data('artikelid');
    }
});