【问题标题】:JQuery: loosing the <tr> id when using replaceWith() methodJQuery:使用 replaceWith() 方法时丢失 <tr> id
【发布时间】:2012-12-07 13:04:33
【问题描述】:

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

欢迎任何帮助。谢谢。

【问题讨论】:

  • 你不必替换元素来交换它们 -> a.before(b);
  • 这应该会有所帮助:stackoverflow.com/questions/698301/…
  • @adeneo,就这么简单。非常感谢。能否请您回答问题,以便我确认。谢谢
  • @dystroy,非常感谢。之前或之后的功能非常好。

标签: javascript jquery html


【解决方案1】:

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

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

然后像这样调用:

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

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

FIDDLE

【讨论】:

    【解决方案2】:

    你的常量 &lt;tr&gt;&lt;/tr&gt; 没有 id 属性,所以它最终没有 id 属性。

    编辑: 以下是我参考的内容:

    function swap(a, b, direction)
    {
        var html = a.wrapInner('<tr></tr>').html();
        a.replaceWith(b.wrapInner('<tr></tr>').html());
        b.replaceWith(html);
    }
    

    【讨论】:

    • 在我的模板 (html) 中有一个 id 属性
    • 注意,我的答案是 WHY,而不是如何修复它,这取决于您决定,使用 .before(), .after() 或调整 id - 它们对 DOM 交互有不同的影响。
    猜你喜欢
    • 1970-01-01
    • 2011-11-18
    • 2019-01-06
    • 2023-03-21
    • 2017-03-15
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    相关资源
    最近更新 更多