<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script>
window.onload=function()
{
var oTab = document.getElementById('tab1');
var oName = document.getElementById('name');
var oAge = document.getElementById('age');
var oBtn = document.getElementById('btn');
var id = oTab.rows.length+1;
oBtn.onclick=function()
{
var oTr = document.createElement('tr');
var oTd = document.createElement('td');
oTd.innerHTML = id++;
oTr.appendChild(oTd);
var oTd = document.createElement('td');
oTd.innerHTML =oName.value;
oTr.appendChild(oTd);
var oTd = document.createElement('td');
oTd.innerHTML = oAge.value ;
oTr.appendChild(oTd);
var oTd = document.createElement('td');
oTd.innerHTML = "<a href='javascript:'>刪除</a>" ;
oTr.appendChild(oTd);
oTd.getElementsByTagName('a')[0].onclick=function()
{
oTab.tBodies[0].removeChild(this.parentNode.parentNode);
}
oTab.tBodies[0].appendChild(oTr);
}
}
</script>
</head>
<body>
姓名:<input id="name" type="text" />
班級:<input id="age" type="text" />
<input id="btn" type="button" value='添加' />
<table id="tab1" border="1px" width="600px">
<tHead>
<td>1</td>
<td>2</td>
<td>3</td>
<td>操作</td>
</tHead>
<tbody>
<tr>
<td>2</td>
<td>22</td>
<td>33</td>
<td></td>
</tr>
<tr>
<td>3</td>
<td>22</td>
<td>33</td>
<td></td>
</tr>
<tr>
<td>4</td>
<td>22</td>
<td>33</td>
<td></td>
</tr>
</tbody>
</table>
</body>
</html>
這個(gè)實(shí)作效果是一個(gè)表格中,最後一列加入刪除的效果,我搞不懂,createElement創(chuàng)建了a標(biāo)籤添加刪除功能之後,為什麼oTd.getElementsByTagName('a')[0].onclick=function( ) 這裡面TagName選的是[0],不是每次都會建立一個(gè)a標(biāo)籤來觸發(fā)js麼。為什麼不是做個(gè)for循環(huán)給每個(gè)a來加onclick
#######這是慕課網(wǎng)上JS的課程吧'oTd'本來就是oBtn.onclick之後才會創(chuàng)建的元素這裡面的a元素當(dāng)然也是新建的;
為何還總是要用[0]? 因?yàn)間etElementsTagName('a ')回傳的是一個(gè)元素list 即使長度只有1 也要用[0]或.item(0)來拿到這個(gè)DOM元素
透過你的程式碼可知,此時(shí)的oTd是用來存放刪除連結(jié)的td元素,設(shè)定完innerHTML屬性之後,此時(shí)的td元素為
;刪除 a> oTd.getElementsByTagName('a')
的回傳值是該td元素(限定了選擇範(fàn)圍,就是從包含這個(gè)a元素的父元素td中選擇,而不是table元素)中包含的a元素組成的數(shù)組,因?yàn)樵搕d元素只包含一個(gè)a元素,所以結(jié)果是長度為1的數(shù)組,要獲取這個(gè)a元素,當(dāng)然是取結(jié)果的[0]
了(數(shù)組下標(biāo)從0開始);
可以用一個(gè)for迴圈來加入onclick事件,你可以在每次執(zhí)行完oTab.tBodies[0].appendChild(oTr);
語句後,使用
var aArray = oTab.getElementsByTagName("a");
for (var i = 0; i < aArray.length; i++) {
aArray[i].onclick = function() {
oTab.tBodies[0].removeChild(this.parentNode.parentNode);
}
}
但是問題是,你在第一個(gè)點(diǎn)擊添加的時(shí)候,給第一條添加信息的a元素註冊了點(diǎn)擊事件;當(dāng)你第二次點(diǎn)擊添加的時(shí)候,因?yàn)榈谝粭l信息已經(jīng)有點(diǎn)擊事件了,為什麼還要再覆蓋一次點(diǎn)擊事件?你只需要給新新增的元素註冊點(diǎn)擊事件就可以了啊。