為什么刪除原有的兩行刪不掉?和點(diǎn)贊最多的答案區(qū)別在哪里?
function?del(obj){ ????????//這種方法會(huì)導(dǎo)致已有的兩個(gè)刪不掉?。?! ????????//var?table=document.getElementById("table"); ????????//table.removeChild(obj.parentNode.parentNode); ????????//這是點(diǎn)贊最多的答案 ????????var?tr=obj.parentNode.parentNode; ????????tr.parentNode.removeChild(tr); ????}
到底問(wèn)題出在什么地方?
2017-02-23
因?yàn)槟闳〉腎D不對(duì),你直接取ID為table的元素,那他的父級(jí)父級(jí)就找不到元素了,所以無(wú)法刪除。
而答案是從他點(diǎn)擊事件的那個(gè)a標(biāo)簽開始的,所以取3個(gè)父級(jí)就取到了tr,然后刪除就有效。
2017-03-01
我一開始也遇到了你這個(gè)問(wèn)題,后來(lái)我想看看傳入的obj.parentNode.parentNode的父級(jí)元素即obj.parentNode.parentNode.parentNode到底是不是table,就輸入了以下代碼。
結(jié)果alert彈出的結(jié)果卻是TBODY而不是table,后來(lái)經(jīng)過(guò)一番尋找,在別人的解答中發(fā)現(xiàn)了這張圖:
"table完整地寫法是上述這張圖,而我們平時(shí)寫代碼一般都省略其內(nèi)部的三個(gè)子節(jié)點(diǎn)<thead> <tfoot> <tbody>,<tr>存在<tbody>中,<tbody>為<tr>父節(jié)點(diǎn),但你運(yùn)行代碼時(shí),瀏覽器會(huì)自動(dòng)給你添加<thead> <tfoot> <tbody>"
到這里,我就明白原因了。當(dāng)我們通過(guò)id獲取table時(shí),<table>與<tr>之間還有<tbody>。
?????? var?table=document.getElementById("table");
?????? table.removeChild(obj.parentNode.parentNode);
在這句代碼中,table代表的是<table>節(jié)點(diǎn),obj.parentNode.parentNode代表的是<tr>,由于<table>的子節(jié)點(diǎn)是<thead> <tfoot> <tbody>而不是<tr>,所以使用removeChild()刪除時(shí)會(huì)失敗。
而點(diǎn)贊最多的答案即:
??????? var?tr=obj.parentNode.parentNode;
????????tr.parentNode.removeChild(tr);
這里是直接用tr.parentNode來(lái)刪除tr這個(gè)節(jié)點(diǎn)(tr.parentNode這個(gè)節(jié)點(diǎn)一定是tr的父節(jié)點(diǎn)吧),? 所以可以成功刪除。
你也可以自己編寫代碼測(cè)試一下。 ??
?
2017-02-25
這回答不靠譜啊 取的ID不是<TABLE >應(yīng)該也是<A>吧 是obj.的父類的父類 又不是TABLE的父類的父類