JS 绑定 - 刻舟求剑

来,玩个抽积木的游戏! 

有如下:积木A、B、C,假设 A、B、C由下到上排列,随意分 3 次,抽出这3块积木(点击按钮,删除这个按钮本身 )

<div id="test">
	<button>积木A</button>
	<button>积木B</button>
	<button>积木C</button>
</div>

先 jQuery 

随便怎么抽都可以。

$("#test button").click(function(){
	$(this).remove();
});

再 JS

很显然,由上到下C、B、A抽出,也没有问题。

换个抽法,先抽 积木A,成功;

 再抽积木 B,发现抽出的是 C,
最后抽 积木 B,成功报错:     Failed to execute 'removeChild' on 'Node': parameter 1 is not of type 'Node'. 

 

点解呢???!

var btns = document.getElementById("test").getElementsByTagName("button");
for (var i = 0; i < btns.length; i++) {
	btns[i].index = i ;
	btns[i].onclick = function(){
		this.parentNode.removeChild(btns[this.index]);
	}
}

其实,这里每块积木的index,会随着抽取不断变化的,像你在食堂打饭,本来排在第二,前面的打完走了,你就第一了,但你非得等着食堂阿姨叫第二个来打饭,自然会有问题!

小学课本上,有个更准确的形容词,叫刻舟求剑!

所以,如果你哪里想抽,抽哪里,那么,只能每一次抽出之前,先重新标记一遍,再去抽!

var btnWrap = document.getElementById("test");		
btnWrap.onclick = function(e){     //btnWrap.addEventListener("click",function(e){
	var blocks = btnWrap.getElementsByTagName("button");
	for (var i = 0; i < btnWrap.children.length; i++) {
		btnWrap.children[i].index =i;				
	}
	e.target.parentNode.removeChild(blocks[e.target.index]);
	//这里不能用 this.parentNode | this.index ,this 指的是 #test	
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值