Javascript可靠的创建和删除功能
我正在尝试开发一个CRUD工具。然而,我用来追求这一点的逻辑是有问题的。你可以找到我的 我的HTML看起来是这样的: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&
<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
集合会随着元素的添加/删除而更新。因此,这些指数不会保持准确。例如,您不能删除一个最初索引高于剩余索引数的元素
还有,哟