【问题标题】:jQuery - moving elements with appendTo not working properlyjQuery - 使用 appendTo 移动元素无法正常工作
【发布时间】:2014-08-28 16:40:21
【问题描述】:

我想通过点击事件将一些 h3 标签从顶部 div 移动到底部 div 和 相反
一切正常,直到我单击最近移动的元素以查看相反的操作。

例如,我点击Item 1。它进入底部div。再次单击第 1 项,它不起作用。为什么?

$("document").ready(function() {
  $("div#top h3").click(function(e) {
    $(e.target.tagName + "#" + e.target.id).detach().appendTo("div#down");
  });
  $("div#down h3").click(function(e) {
    $(e.target.tagName + "#" + e.target.id).detach().appendTo("div#top");
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="top">
  <h1>Top</h1>
  <h3 id="th3-1">Item 1</h3>
  <h3 id="th3-2">Item 2</h3>
  <h3 id="th3-3">Item 3</h3>
</div>

<div id="down">
  <h1>Down</h1>
  <h3 id="dh3-1">Item 4</h3>
  <h3 id="dh3-2">Item 5</h3>
  <h3 id="dh3-3">Item 6</h3>
</div>

【问题讨论】:

  • 您的代码将click 函数应用于匹配元素的current 集(文档准备就绪)。单击#top 中的元素可以工作,因为它附加了事件侦听器。然后它被移动到#down,但点击功能仍然存在——它将在随后的点击中重新附加到#down。在this fiddle 中,单击顶部的项目 1,然后单击 2。他们将被移动到下。然后点击第1项,看到它被追加到了Down的末尾。再次单击第 2 项,结果相同。带有.on() 的事件委托允许您使用“实时”选择器。

标签: javascript jquery


【解决方案1】:

由于您希望根据元素的位置具有动态行为,因此您需要使用event delegation

jQuery(function ($) {
    $("#top").on('click', 'h3', function (e) {
        $(this).appendTo("#down");
    });
    $("#down").on('click', 'h3', function (e) {
        $(this).appendTo("#top");
    });
});

演示:Fiddle

【讨论】:

    【解决方案2】:

    您需要告诉它来确定 H3 的点击位置并相应地移动。

    $("document").ready(function() {
     $("div > h3").click(function(e){
      if($(this).parent().attr('id') == 'top')
       $(e.target.tagName+"#"+e.target.id).detach().appendTo("div#down");
      else
       $(e.target.tagName+"#"+e.target.id).detach().appendTo("div#top");
     });
    });
    

    这是demo

    【讨论】:

    猜你喜欢
    • 2011-12-28
    • 1970-01-01
    • 2011-10-23
    • 2012-11-28
    • 2016-11-15
    • 2020-01-23
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    相关资源
    最近更新 更多