Javascript可靠的创建和删除功能

Javascript可靠的创建和删除功能,javascript,Javascript,我正在尝试开发一个CRUD工具。然而,我用来追求这一点的逻辑是有问题的。你可以找到我的 我的HTML看起来是这样的: <p class="remu">Fish 0</p> <p class="remu">Fish 1</p> <p class="remu">Fish 2</p> <div id="moregohere"></div> <p id="generator">Generator&

我正在尝试开发一个CRUD工具。然而,我用来追求这一点的逻辑是有问题的。你可以找到我的

我的HTML看起来是这样的:

<p class="remu">Fish 0</p>
<p class="remu">Fish 1</p>
<p class="remu">Fish 2</p>
<div id="moregohere"></div>
<p id="generator">Generator</p>

鱼0

鱼1

鱼2

发电机发电机
  • 您不需要这种iLife方法,只需绑定事件
    单击
  • 使用
    this.remove()
    代替
    remu[i]。remove()
    可避免变量
    i
    作用域问题
  • var remu=document.getElementsByClassName(“remu”);
    var生成器=document.getElementById(“生成器”);
    var moregohere=document.getElementById(“moregohere”);
    generator.addEventListener('click',function(){
    moregohere.innerHTML+=“

    添加了鱼”

    ”; 删除(); }); 删除(); 函数删除(){ 对于(变量i=0;i

    鱼0

    鱼1

    鱼2

    发电机发电机
  • 您不需要这种iLife方法,只需绑定事件
    单击
  • 使用
    this.remove()
    代替
    remu[i]。remove()
    可避免变量
    i
    作用域问题
  • var remu=document.getElementsByClassName(“remu”);
    var生成器=document.getElementById(“生成器”);
    var moregohere=document.getElementById(“moregohere”);
    generator.addEventListener('click',function(){
    moregohere.innerHTML+=“

    添加了鱼”

    ”; 删除(); }); 删除(); 函数删除(){ 对于(变量i=0;i

    鱼0

    鱼1

    鱼2


    generator

    更改HTML,使您的
    包含所有元素

    <div id="moregohere">
      <p class="remu">Fish 0</p>
      <p class="remu">Fish 1</p>
      <p class="remu">Fish 2</p>
    </div>
    <p id="generator">Generator</p>
    
    
    鱼0

    鱼1

    鱼2

    发电机


    有更有效的方法来处理元素并将事件绑定到DOM上的对象。

    更改HTML,以便
    保存所有元素

    <div id="moregohere">
      <p class="remu">Fish 0</p>
      <p class="remu">Fish 1</p>
      <p class="remu">Fish 2</p>
    </div>
    <p id="generator">Generator</p>
    
    
    鱼0

    鱼1

    鱼2

    发电机


    有更有效的方法来处理元素并将事件绑定到DOM上的对象。

    一个问题是,在添加鱼之后调用
    remove()
    时,不会从原始HTML中的
    remu
    元素中删除旧的事件侦听器。当您删除元素时,它们在
    remu
    NodeList中的索引将更改。因此,最终将删除具有不同索引的多个元素

    这对于
    moregohere
    中的元素不是问题,因为使用
    innerHTML+=
    会在该DIV中重新创建整个DOM,但原始元素不会受到影响

    正如Ele指出的,您可以在事件侦听器中使用
    this
    来引用单击的元素,因此不需要处理索引。但是您还应该删除旧的侦听器,以防止它运行两次。使用命名函数作为侦听器将使这成为可能

    var remu=document.getElementsByClassName(“remu”);
    var生成器=document.getElementById(“生成器”);
    var moregohere=document.getElementById(“moregohere”);
    generator.addEventListener('click',function(){
    moregohere.innerHTML+=“

    添加了鱼”

    ”; 删除(); }); 删除(); 函数删除(){ 对于(i=0;i

    鱼0

    鱼1

    鱼2


    generator

    一个问题是,在添加鱼之后调用
    remove()
    时,没有从原始HTML中的
    remu
    元素中删除旧的事件侦听器。当您删除元素时,它们在
    remu
    NodeList中的索引将更改。因此,最终将删除具有不同索引的多个元素

    这对于
    moregohere
    中的元素不是问题,因为使用
    innerHTML+=
    会在该DIV中重新创建整个DOM,但原始元素不会受到影响

    正如Ele指出的,您可以在事件侦听器中使用
    this
    来引用单击的元素,因此不需要处理索引。但是您还应该删除旧的侦听器,以防止它运行两次。使用命名函数作为侦听器将使这成为可能

    var remu=document.getElementsByClassName(“remu”);
    var生成器=document.getElementById(“生成器”);
    var moregohere=document.getElementById(“moregohere”);
    generator.addEventListener('click',function(){
    moregohere.innerHTML+=“

    添加了鱼”

    ”; 删除(); }); 删除(); 函数删除(){ 对于(i=0;i

    鱼0

    鱼1

    鱼2


    generator

    您当前的方法存在一些重大问题

    自删除元素绑定到它们的索引号,这在添加它们时是正确的

    但是
    remu
    集合会随着元素的添加/删除而更新。因此,这些指数不会保持准确。例如,您不能删除一个最初索引高于剩余索引数的元素

    还有,哟