javascript - 如何通过 jQuery 动态添加和删除元素?

标签 javascript jquery html css

$(document).ready(function(){
  var roles = ["A", "B", "C", "D", "E", "F", "G", "H", "I"];

  $.each(roles, function(){
    $(".div2").append("<div class='roles'><i class='fa fa-plus-circle'></i><span>" + this + "</span></div>");
  });
});

$(document).ready(function(){
  $(".div2 .roles").click(function(){
    var role = $(this)
    $(".div1").append(role);
  });
});

$(document).ready(function(){
  $(".div1 .roles").click(function(){
    var role = $(this)
    $(".div2").append(role);
  });
});
.div1,.div2 {
  display:inline-block;
}

.div1 {
  width:200px;
  height:230px;
  border: 2px solid rgba(204, 204, 204, 0.2);
  border-radius: 10px;
  margin-right:6px;
  float:left;
}

.div2 {
  width:200px;
  height:230px;
  margin-right:10px;
  background-color: #f8f8f8;
  border-radius: 10px;
}
<link href="http://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<div class="div1"></div>
<div class="div2"></div>

现在,我有两个 div 区域。 Div2(Right) 包含一些元素,当我单击“添加”按钮时,它将移至 Div1(Left) 但我使用相同的概念将其移回 Div2,但无法正常工作。我错过了什么吗?

另外一个问题,如何把图片改成

<i class="fa fa-minus-circle"></i>

如果元素从 Div2 移动到 Div1。

最佳答案

由于元素是动态添加的,因此使用委托(delegate)事件处理程序:

$(document).ready(function(){
  $(document).on('click', ".div2 .roles", function(){
    var role = $(this)
    $(".div1").append(role);
  });
});

$(document).ready(function(){
  $(document).on('click', ".div1 .roles", function(){
    var role = $(this)
    $(".div2").append(role);
  });
});

这些通过将责任委派(因此得名 delegated)到不变的祖先元素(document 是最好的默认值,如果没有其他更接近/方便的话)来工作。在您的示例中,.div1.div2 可能会这样做(如果它们永远不会改变)。

例如

$(document).ready(function(){
  $('.div2').on('click', ".roles", function(){
    var role = $(this)
    $(".div1").append(role);
  });
});

$(document).ready(function(){
  $('.div1').on('click', ".roles", function(){
    var role = $(this)
    $(".div2").append(role);
  });
});

这是通过列出事件(例如点击)冒泡到祖先来实现的。 然后将 jQuery 选择器仅应用于气泡链中的元素。 然后仅将函数应用于导致事件的匹配元素。结果是元素只需要在点击时存在,而不是在注册点击时存在。

注意事项:

  • 目前您有 3 个 DOM 就绪处理程序。您可以围绕 3 个代码块准备好一个 DOM。
  • DOM 就绪 处理程序的较短版本如下:

例如

$(function(){
   // Your code here
});

关于javascript - 如何通过 jQuery 动态添加和删除元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31557790/

相关文章:

html - 为什么我的 <a> 元素没有显示?

jquery - 欧芹远程替换默认错误消息

javascript 如何使用键和复选框值创建多维数组

Jquery 图像幻灯片。缩小

html - 制作垂直的日语文本

html - 如何垂直对齐所有内容,包括列中的边框?

javascript - 将 dom 节点传递到 Knockout 组件中(使用 RequireJS 时)

javascript - Node 和 Node-Webkit 之间的奇数速度差异(~10ms VS ~520ms)

javascript - 从外部文件到指令的 Angular 广播数据

javascript - 创建带有可滚动图片的 div 容器时出现问题